Python:显示类型继承
我正试着在空闲状态下深入研究python自定义类以及它们在内存中的存储方式。假设我有以下代码:Python:显示类型继承,python,python-3.x,object,Python,Python 3.x,Object,我正试着在空闲状态下深入研究python自定义类以及它们在内存中的存储方式。假设我有以下代码: class Point: pass x=Point() print(x) 考虑到以下输出: 我知道,由于我的类不包含代码,所以当我创建一个类型为Point的对象时,会隐式创建一个类型为object的对象,而Point对象x继承了\u str\u等方法。但是,我似乎看不到连接。当我键入dir(x)时,我没有看到任何属性存储对object类型的对象的引用。我是否误解了它的工作原理,或者是否存
class Point:
pass
x=Point()
print(x)
考虑到以下输出:
我知道,由于我的类不包含代码,所以当我创建一个类型为Point
的对象时,会隐式创建一个类型为object
的对象,而Point
对象x
继承了\u str\u
等方法。但是,我似乎看不到连接。当我键入dir(x)
时,我没有看到任何属性存储对object
类型的对象的引用。我是否误解了它的工作原理,或者是否存在我不知道的属性 没有涉及对象类型的(直接)实例。调用Point()
时,将创建一个Point
实例,而不创建其他实例。继承是一种对类而不是实例进行操作的机制
Python对象有两个属性:类型和值。x
的类型是点
。x
的值由其\uuuu dict\uuuu
表示,该值为空(因为它没有属性):
因此,x
可以使用对象
方法的原因是点
继承自对象
,而不是因为x
中存储了一个隐藏的对象
实例。您可以看到点
可以访问所有对象
方法:
>>> Point.__str__ is object.__str__
True
>>> Point.__init__ is object.__init__
True
# etc...
因此,通过代理,x
也可以访问所有的对象
方法。您可能正在寻找点。\uuuu mro\uuu
?类的属性点
。它告诉您,如果调用x.method
,python将按照什么顺序查找方法。在您的情况下,这将是:
print(Point.__mro__) # or Point.mro()
# (<class '__main__.Point'>, <class 'object'>)
print(Point.u mro_uuu_35;或Point.mro()
# (, )
>>> Point.__str__ is object.__str__
True
>>> Point.__init__ is object.__init__
True
# etc...
print(Point.__mro__) # or Point.mro()
# (<class '__main__.Point'>, <class 'object'>)