Иногда, класс будет иметь "private"@classmethod
, какие другие методы вызывают:Python «частный» classmethod и DRY
class FooClassThisSometimesHasALongNameEspIfAUnittestSubclasss(...):
@classmethod
def foo():
...
def bar(self):
...
FooClassThisSometimesHasALongNameEspIfAUnittestSubclasss.foo()
...
Как можно видеть, имя класса повторяется; это, по общему признанию, вероятно, недостаточно серьезное, чтобы вызвать крах современных технологий, за которым следует апокалипсис зомби, но это все равно нарушение DRY и несколько раздражает.
Ответ на вопрос similar question about super
заявил, что это one of the reasons for the Py3's new super
.
В отсутствие какой-либо магии normal()
функция (которая, в отличие от super()
, возвращает текущий класс), есть ли способ избежать повторения?
Это очень полезно, спасибо! Однако, это так просто, почему это не было использовано для '' супер''? –
@AmiTavory: super() может вызывать родительские классы, но также и классы братьев и сестер. Поэтому использовать понятие 'self .__ class__'. –
Спасибо, но мой вопрос немного другой и касается дельта между старым '' супер'' и новым. Ваш отличный ответ подразумевает, что DRY не должен был действительно рассматриваться, и все же это как-то было. –