Python中的'type()```uuu class_u2;和``uuu bases_uu`之间有什么区别?

2024-06-26 14:41:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python的REPL中尝试过:

>>> class Foo:
...  def f():{}
... 
>>> 
>>> type(Foo)
<type 'classobj'>
>>> Foo.__bases__
()
>>> type(type(Foo))
<type 'type'>
>>> type(Foo).__bases__
(<type 'object'>,)

然而,我仍然不能确切地理解OOP中的“数据类型”是什么意思。在

在Python中,我知道一个实例可以通过.__class__获得它的类,而一个类可以通过.__bases__获得其父类。这似乎很容易理解。在

但是“类”的typeTypeObject是什么意思呢?a的type是什么意思?a的__bases__是什么意思?Python中的type和{}之间有什么区别?在

我觉得这有点困惑。。有人对此有什么想法吗?在


Tags: 实例objectfoodeftypereploopclass
2条回答

理解的关键是认识到python中的一切都是一个对象。而且,从技术上讲,object不是一个关键字,而是一个全局内置的。在

This answer is perhaps the best explanation I've ever seen on the topic.我强烈建议阅读整篇文章。它讨论了很多关于元类的内容,并且type与元类非常相关。在

本质上,类的类型是元类。与python中所有新样式类从object继承的方式相同,所有元类都从type继承。这有点令人困惑,因为python中的type全局用于两个不同的目的。它是一个元类和一个返回对象类型的函数。在

一个非常简单的方法是元类创建类,就像类创建实例一样。在

在python中类是对象,即类是“与其他类一样的东西” 在你的例子中

class Foo():
    pass

x = Foo()

type(x)                     # Foo, x is a Foo
type(Foo)                   # type, Foo is a type

你定义的类不仅仅是一段代码。它是一个占用内存空间的物体。在

^{pr2}$

是有效的操作。在

>>> type(type(Foo))
<type 'type'>

类型是一种特殊的类(metaclass) 它的对象是可以创建对象的类

相关问题 更多 >