Skip to main content
 首页 » 编程设计

python之super 对象的属性

2025年05月04日8leader

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__ 属性仅显示实例代理后面的对象的属性。这些方法再次位于该代理后面的对象的类字典中。