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
>>>
为什么 super 对象的属性 aaa 没有列出? 由于未列出该属性,super 对象 ss 如何能够调用类 Mysuper 中的 aaa()?
请您参考如下方法:
方法包含在类字典中,而不是实例字典中。
看这个:
class C:
def method(self): pass
print(C().__dict__) # prints {}
print(C.__dict__) # prints a lot of stuff plus the method
继承在这里不起作用。
使用 super:
super: Return a proxy object that delegates method calls to a parent or sibling class
使用super(SomeType, some_instance),您可以获得对象的代理,而不是类型。因此,在该代理对象上调用 dir 将为您提供 super 对象的实例字典,该 super 对象不包含您定义的任何方法或属性,而获取 __dict__ 属性仅显示实例代理后面的对象的属性。这些方法再次位于该代理后面的对象的类字典中。
