class Mysuper(object):
def aaa(self):
print "In Superclass"
class Mysub(Mysuper):
def aaa(self):
ss = super(Mysub, self)
print dir(ss) , type(ss)
print ss.__dict__
ss.aaa()
print "In Subclass"
>>> ob = Mysub()
>>> ob.aaa()
['__class__', '__delattr__', '__doc__', '__format__', '__get__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__self_class__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__thisclass__'] <type 'super'>
{}
In Superclass
In Subclass
>>>
Почему атрибут aaa
не указан для super
? Поскольку атрибут не указан как super
объект ss
можно позвонить aaa()
в классе Mysuper
?Атрибуты супер объекта
Зачем вам ожидать, что у него будет атрибут 'aaa'? Вы уже сделали вывод, что 'ss' не является ни классом Mysuper, ни его экземпляром, но является экземпляром' '. Почему именно экземпляр 'super' должен иметь член' aaa'? –
@Rogalski Добавлен другой запрос, см. Выше. – abc
В основном это волшебство '__getattribute__'. [Используйте источник, Люк!] (Https://github.com/python/cpython/blob/master/Objects/typeobject.c#L7393). 'super_getattro' - это то, что вы хотите. –