Python中的类型和类
我对Python中的类型和类有点困惑。例如,以下REPL对话让我感到困惑:Python中的类型和类,python,class,types,Python,Class,Types,我对Python中的类型和类有点困惑。例如,以下REPL对话让我感到困惑: >>> class A: pass ... >>> a = A() >>> type(a) <type 'instance'> >>> a.__class__ <class __main__.A at 0xb770756c> >>> type([]) <type 'list'> >>
>>> class A: pass
...
>>> a = A()
>>> type(a)
<type 'instance'>
>>> a.__class__
<class __main__.A at 0xb770756c>
>>> type([])
<type 'list'>
>>> [].__class__
<type 'list'>
>>> type(list)
<type 'type'>
>>> list.__class__
<type 'type'>
>>> type(A)
<type 'classobj'>
>>> A.__class__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: class A has no attribute '__class__'
>A类:合格
...
>>>a=a()
>>>类型(a)
>>>一节课__
>>>类型([])
>>>[]。\uuu类__
>>>类型(列表)
>>>列表__
>>>类型(A)
>>>一节课__
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:类A没有属性“\uuuuu class\uuuuuuu”
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
如有任何解释/进一步阅读可澄清此行为,将不胜感激。TIA.您遇到了新样式类与经典类的不同行为。要进一步阅读,请阅读以下内容:。具体阅读关于课程以及新风格和经典课程之间的差异的部分 尝试在REPL中键入以下内容:
class A: pass
class B(object): pass
你会发现你得到了不同的结果。在这里,您将讨论新样式和旧样式类之间的差异。使用Python 2.6.1,我得到了以下结果:
> type(A)
<type "classobj">
> type(B)
<type "type">
与我们的B类(对象)相同:通过结果。而且
> c = []
> type(c)
<type "list">
>c=[]
>类型(c)
它告诉你的是对象的实例,而不是它的定义。这是“物理原因”。或者可能是“历史性的”。在Python 3中,这一切都是固定的:
>>> class A: pass
...
>>> a = A()
>>> type(a)
<class '__main__.A'>
>>> a.__class__
<class '__main__.A'>
>>> type([])
<class 'list'>
>>> [].__class__
<class 'list'>
>>> type(list)
<class 'type'>
>>> list.__class__
<class 'type'>
>>> type(A)
<class 'type'>
>>> A.__class__
<class 'type'>
>>> class B(object): pass
...
>>> type(B)
<class 'type'>
>>> b = B()
>>> type(b)
<class '__main__.B'>
>A类:合格
...
>>>a=a()
>>>类型(a)
>>>一节课__
>>>类型([])
>>>[]。\uuu类__
>>>类型(列表)
>>>列表__
>>>类型(A)
>>>一节课__
>>>B类(对象):通过
...
>>>类型(B)
>>>b=b()
>>>类型(b)
在Python 3.0中,用户定义的类对象是名为type的对象的实例,
这本身就是一个类。
•在Python 2.6中,新样式的类继承自object,object是类型的子类;
•经典类是类型的实例,不是从类创建的。您应该使用类a(对象)
定义类。然后你会得到类型(a)
的
。似乎我的错误是没有使用新的类型类,结果给了我奇怪的结果(当然是为了向后兼容)。链接看起来很有趣。谢谢,很高兴知道。没有意识到Python 3已经解决了这个问题。那么,我假设所有类,不管是否显式地从object
派生,都从object
派生,那么?
>>> class A: pass
...
>>> a = A()
>>> type(a)
<class '__main__.A'>
>>> a.__class__
<class '__main__.A'>
>>> type([])
<class 'list'>
>>> [].__class__
<class 'list'>
>>> type(list)
<class 'type'>
>>> list.__class__
<class 'type'>
>>> type(A)
<class 'type'>
>>> A.__class__
<class 'type'>
>>> class B(object): pass
...
>>> type(B)
<class 'type'>
>>> b = B()
>>> type(b)
<class '__main__.B'>