Python:显示类型继承

标签 python python-3.x object

我试图在空闲状态下深入了解Python自定义类以及它们如何存储在内存中。假设我有以下代码:

class Point: 
    pass
x=Point()
print(x)

给出以下输出:

<__main__.Point object at 0x000002A3A071DF60>

我知道,由于我的类不包含任何代码,因此当我创建 Point 类型的对象时,类型为 object 的对象隐式创建 Point对象x继承诸如__str__之类的方法等等。但是,我似乎看不到联系。当我输入dir(x)时,我没有看到任何存储对 object 类型的对象的引用的属性。 。我是否误解了它的工作原理,或者是否有一些我不知道的属性?

最佳答案

不涉及object类型的(直接)实例。当您调用 Point() 时,会创建一个 Point 实例,而不会创建其他任何东西。继承是一种在上运行的机制,而不是在实例上运行。

Python 对象有两个属性:它们的类型和它们的x类型Pointx 由其 __dict__ 表示,它为空(因为它没有属性):

>>> type(x)
<class '__main__.Point'>
>>> x.__dict__
{}

没有对object实例的引用,因为不存在这样的实例。 object 的继承体现在 class Point 中:

>>> Point.__base__
<class 'object'>
>>> Point.mro()
[<class '__main__.Point'>, <class 'object'>]

所以x之所以可以使用object方法是因为Point继承自object,而不是因为有存储在 x 中的隐藏object实例。您可以看到 Point 可以访问所有 object 方法:

>>> Point.__str__ is object.__str__
True
>>> Point.__init__ is object.__init__
True
# etc...

因此,通过代理,x 也可以访问所有对象 方法。

关于Python:显示类型继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52941638/

相关文章:

c++ - Shedskin - 编译错误

python - 在一个图中叠加两个密度

python - 确保键的笛卡尔积出现在 Pandas 表中

python - 我不明白这行代码 tk.Tk.__init__(self,*args,**kwargs)

python - 移动第一个元素以结束 Numpy 数组

python - 同时使用 Python 3.1 和 2.5

Python csv writer 在空的第一行添加引号,但不在后续行上添加引号

读取对象时Java堆栈溢出

c# - 使用 foreach 循环显示对象

javascript - NodeJS 双否定三元运算符