Python“;“私人”;分类方法和干燥
有时,一个类会有一个其他方法调用的Python“;“私人”;分类方法和干燥,python,dry,class-method,Python,Dry,Class Method,有时,一个类会有一个其他方法调用的@classmethod: class FooClassThisSometimesHasALongNameEspIfAUnittestSubclasss(...): @classmethod def foo(): ... def bar(self): ... FooClassThisSometimesHasALongNameEspIfAUnittestSubclasss.foo()
@classmethod
:
class FooClassThisSometimesHasALongNameEspIfAUnittestSubclasss(...):
@classmethod
def foo():
...
def bar(self):
...
FooClassThisSometimesHasALongNameEspIfAUnittestSubclasss.foo()
...
可以看出,类名是重复的;不可否认,它的严重程度可能还不足以导致当前技术的崩溃,并伴随着僵尸世界末日的到来,但它仍然是一种违反,而且有点令人恼火
对a的回答是这样的
在缺少一些神奇的normal()
函数(与super()
相反,它返回当前类)的情况下,有什么方法可以避免重复吗?您可以使用:
self.__class__.foo()
那很有用,谢谢!然而,它这么简单,为什么不将它用于
super
?@AmiTavory:super()可以调用父类,也可以调用兄弟类。因此,这与使用self是一个不同的概念。谢谢,但我的问题有点不同,涉及旧super
和新之间的增量。您出色的回答意味着DRY本不应该成为一个考虑因素,但不知何故,它确实是一个考虑因素。@AmiTavory:Python3.x中对super()的更改确实是为了避免重复您自己。我不确定我的回答如何暗示干燥不应该是一个考虑因素?原则上,您也可以在Python2.x中编写super(self.\u uuu class\u uuu,self),但大多数用法都倾向于重复类名。在任何情况下,这都是一件坏事,这就是为什么对super()进行了更改。实际上,由于这是一个classmethod
,您可以在实例上调用它,而不会遇到任何问题,如self.foo
。