Python“私有”类方法和DRY

Python “private” classmethod and DRY

有时,类会有一个"private"@classmethod,其他方法会调用它:

1
2
3
4
5
6
7
8
9
class FooClassThisSometimesHasALongNameEspIfAUnittestSubclasss(...):
    @classmethod
    def foo():
        ...

    def bar(self):
        ...
        FooClassThisSometimesHasALongNameEspIfAUnittestSubclasss.foo()
        ...

可以看出,类名是重复的;诚然,它可能不够严重,不足以导致当前技术的崩溃,随后是僵尸的天启,但它仍然是一种干巴巴的侵犯,而且有点烦人。

关于super的一个类似问题的答案表明,这是py3新super的原因之一。

在缺少一些神奇的normal()函数(与super()相反,该函数返回当前类)的情况下,是否有办法避免重复?


您可以使用:

1
self.__class__.foo()