Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:显示类型继承_Python_Python 3.x_Object - Fatal编程技术网

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类型的对象的引用。我是否误解了它的工作原理,或者是否存

我正试着在空闲状态下深入研究python自定义类以及它们在内存中的存储方式。假设我有以下代码:

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'>)