小编Mai*_*fel的帖子

继承最佳实践:*args,**kwargs或显式指定参数

我经常发现自己覆盖了父类的方法,并且永远无法决定是否应该明确地列出给定的参数,或者只是使用一个毯子*args, **kwargs结构.一个版本比另一个好吗?有最好的做法吗?我缺少什么(dis-)优势?

class Parent(object):

    def save(self, commit=True):
        # ...

class Explicit(Parent):

    def save(self, commit=True):
        super(Explicit, self).save(commit=commit)
        # more logic

class Blanket(Parent):

    def save(self, *args, **kwargs):
        super(Blanket, self).save(*args, **kwargs)
        # more logic
Run Code Online (Sandbox Code Playgroud)

显性变体的感知益处

  • 更明确(Python的禅)
  • 更容易掌握
  • 功能参数易于访问

毯子变体的感知好处

  • 更干
  • 父类很容易互换
  • 在不触及其他代码的情况下传播父方法中的默认值的更改

python inheritance method-signature

44
推荐指数
5
解决办法
2万
查看次数

字符串和运算符:最佳实践,与+的差异

对于我的一个站点,我需要检查是否定义了多个类属性而不是空.到目前为止,我很高兴使用if self.attr:,在我看来是简写if self.attr is not None and self.attr is not '':,或者属性的未定义值.

这样可以正常工作,但在检查多个字符串属性时会产生令人惊讶的行为.'' and ''不是False(正如我所料),但是''.

这引出了一个问题:and运营商是否还有其他类型强制进行类型转换bool?我不能想出一个例子,这种行为上的差异会导致if-clause 的实际不同结果(毕竟,''仍然评估False),但是我觉得有可能是陷阱的边缘情况.

最后,我想知道是否有人知道为什么这样实施?我认为Python的Zen只鼓励单向和单向,并且+运算符似乎已经用于字符串连接的直观方式.

python

12
推荐指数
1
解决办法
222
查看次数

标签 统计

python ×2

inheritance ×1

method-signature ×1