Alc*_*ott 5 python metaclass class new-style-class
在Python 2.x中,所有新样式类都是object隐式或显式继承的.然后看看这个:
>>> class M(type):
... pass
...
>>> class A:
... __metaclass__ = M
...
>>> class B:
... pass
...
>>> a = A()
>>> b = B()
Run Code Online (Sandbox Code Playgroud)
>>> type(A)
<class '__main__.M'>
>>> type(a)
<class '__main__.A'>
Run Code Online (Sandbox Code Playgroud)
这是否意味着A是一种新式的课程?但是不管怎样A都没有继承object,对吧?
>>> type(B)
<class 'classobj'>
>>> type(b)
<type 'instance'>
Run Code Online (Sandbox Code Playgroud)
好的,B是经典课,不是吗?
>>> isinstance(A, object)
True
>>> isinstance(B, object)
True
Run Code Online (Sandbox Code Playgroud)
为什么两者的实例A和B实例object?
如果B是一个实例object,那么type(B)不会classobj,对吧?
关于您可以在这里阅读的元类:http://docs.python.org/reference/datamodel.html#customizing-class-creation.通常,元类用于处理新样式类.当你写:
class M(type):
pass
Run Code Online (Sandbox Code Playgroud)
你使用:
class C:
__metaclass__ = M
Run Code Online (Sandbox Code Playgroud)
您将创建一个新的样式对象,因为M的定义方式(默认实现用于type创建新样式的类).您总是可以实现自己的元类,它将使用创建旧式类types.ClassType.
| 归档时间: |
|
| 查看次数: |
705 次 |
| 最近记录: |