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