Форум сайта python.su
В документации (да и вообще почти везде) вызов super() предлагается делать в виде super(ClassName, self).
Однако вызов super(self.__class__, self) вроде то же работает. Да и удобнее.
В чем проблемы/недостатки вызова super(self.__class__, self)?
Офлайн
недостаток ровно один - ваш метод нерабочий.
class A(object):
def f(self):
print 'A.f'
return None
class B(A):
def f(self):
print 'B.f'
return super(self.__class__, self).f()
class C(B):
def f(self):
print 'C.f'
return super(self.__class__, self).f()
c = C()
c.f()
Офлайн
сломал голову.
К вашему примеру:
>>> C is c.__class__
True
Отредактировано (Июнь 15, 2010 19:26:30)
Офлайн
ZubchickДа, действительно, если подумать, то такая конструкция работать не будет….
Подумайте сами, отчего так происходит.
ZubchickТак оно и есть. Ибо self это C, и self.__class__ is C во всей цепочке вызовов.
в B подставляется self из C
Офлайн
Все верно. Пирожок - на полке :)
Офлайн