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()
を呼び出すことができますか?スーパーオブジェクトの属性
なぜあなたは 'aaa'属性を持つと思いますか? 'ss'は' Mysuper'クラスでもインスタンスでもなく、 'のインスタンスであると結論付けました。なぜ 'super'インスタンスに' aaa'メンバーが必要なのでしょうか? –
@Rogalski別のクエリを追加しました。上記を参照してください。 – abc
それは基本的にいくつかの '__getattribute__'魔法です。 [ソースを使用する、Luke!](https://github.com/python/cpython/blob/master/Objects/typeobject.c#L7393)。 'super_getattro'はあなたが望むものです。 –