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()相反,该函数返回当前类)的情况下,是否有办法避免重复?
您可以使用:
- 非常有用,谢谢!然而,这么简单,为什么不把它用于super?
- @amitavory:super()可以调用父类,也可以调用兄弟类。因此,它与使用self.__class__是不同的概念。
- 谢谢,但我的问题有点不同,涉及到老的super和新的EDOCX1之间的delta。你出色的回答意味着Dry不应该是一个真正的考虑因素,但不知何故是。
- @amitavory:python 3.x中对super()的更改实际上是为了避免重复您自己的操作。我不知道我的回答意味着干不应该考虑?原则上,您也可以在python 2.x中编写super(self.uu classuuuuu,self),但大多数用法都倾向于重复类名。在任何情况下,这都是一件坏事,这就是为什么对super()进行了更改。
- 好的,谢谢你的回答。
- 或者如果你不喜欢所有的双重强调。
- @谢谢,这很有用。
- 实际上,由于这是一个classmethod,您可以在实例上调用它,而不必麻烦,就像self.foo。