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
?
答案 0 :(得分:0)
方法包含在类dict中,而不是实例dict。
见:
class C:
def method(self): pass
print(C().__dict__) # prints {}
print(C.__dict__) # prints a lot of stuff plus the method
继承在这里没有发挥作用。
使用super
:
super
:返回将方法调用委托给父类或兄弟类的代理对象
使用super(SomeType, some_instance)
,您可以获得对象的代理,而不是类型。因此,在该代理对象上调用dir
将获得超级对象的实例dict,该对象不包含任何已定义的方法或属性,并且获取__dict__
属性仅显示该对象后面的对象的实例属性代理。这些方法再次出现在该代理背后的对象的类字典中。
答案 1 :(得分:-2)
当你将自己传递给super(Mysub,self)时,你将自己绑定为超类的一个实例。如果省略self,则不会将aaa视为属性。