python在类中的何处存储继承信息?
python版本python在类中的何处存储继承信息?,python,oop,inheritance,Python,Oop,Inheritance,python版本3.5.2 我尝试从子类获取父类: class A: pass class B(A): pass 经过一点研究,我从中得到了一个解决方案:使用\uuuuu base\uuuu。(特殊类属性) 但是我在B中找不到这个“\uuuuu base\uuuuuu”。\uuu dict\uuuuuu或dir(B),这是我获取属性的正常方式 这肯定是与类相关的信息,如果它不在B中的话。uuu dict\uuuu它在哪里?(尽管我意识到“\uuuuu base\uuuuuuuu
3.5.2
我尝试从子类获取父类:
class A:
pass
class B(A):
pass
经过一点研究,我从中得到了一个解决方案:使用\uuuuu base\uuuu
。(特殊类属性)
但是我在B中找不到这个“\uuuuu base\uuuuuu”
。\uuu dict\uuuuuu
或dir(B)
,这是我获取属性的正常方式
这肯定是与类相关的信息,如果它不在B中的话。uuu dict\uuuu
它在哪里?(尽管我意识到“\uuuuu base\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
为什么dir()
不返回它呢?根据我的阅读,dir()
有一些逻辑,它应该返回“所有可用属性的完整图片”
我最初认为这是故意隐藏的……但你仍然可以很容易地操纵孩子的父母:
class C:
pass
B.__bases__ = (C,) # voila, B got a new Dad
见(我的重点)的说明:
注意:由于提供dir()
主要是为了方便在交互提示下使用,因此它尝试提供一组有趣的名称,而不是提供严格或一致定义的名称,其详细行为可能会在不同版本中发生变化例如,当参数是类时,元类属性不在结果列表中。
B
是一个类,它的元类是type
。因此,如果您确实想要完整的图片,还应该将其视为元类“dir()
:
这里有\uuuuuu base\uuuuuuu
和\uuuuu base\uuuuuu
,还有出现在中的其他东西,比如mro
和\uuuuu子类\uuuuuuuuuuuu当我阅读该文档时,我认为类型(A)。
到A.\uu dict\uuuuuuuuuu>就像类属性到实例属性一样。所以我对自己说,即使类型(A)dict有的基础,但并不意味着A。dict也有。你知道,就像静态变量和实例变量一样……现在我意识到type(type(A))==type(A)
它们都是类,所以A.。\uu dict\uuu>=type(A)。\uu dict\uu
。但是谢谢你的回答
>>> B.__class__ is type
True
>>> dir(type)
['__abstractmethods__', '__base__', '__bases__', '__basicsize__', '__call__', '__class__',
'__delattr__', '__dict__', '__dictoffset__', '__dir__', '__doc__', '__eq__', '__flags__',
'__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__',
'__init_subclass__', '__instancecheck__', '__itemsize__', '__le__', '__lt__',
'__module__', '__mro__', '__name__', '__ne__', '__new__', '__prepare__', '__qualname__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasscheck__', '__subclasses__', '__subclasshook__', '__text_signature__',
'__weakrefoffset__', 'mro']