Python号称“万物皆对象”,所以说“类”也是对象!类的实例叫对象,元类的实例叫类。也就是说,元类是类的类。这对Ruby程序员来说很好理解,因为Ruby里虚类的概念基本等同于元类,不过对于PHP程序员来说就不好理解了,下面看看语法:
先看看在Python2.6里的用法:
>>> class Foo(type):
def __str__(self):
return "foo"
>>> class Bar(object):
__metaclass__ = Foo
def __str__(self):
return "bar"
>>> type(Bar)
<class '__main__.Foo'>
>>> type(Bar())
<class '__main__.Bar'>
>>> print(Bar)
foo
>>> print(Bar())
bar
再看看在Python3.0里的语法:
>>> class Foo(type):
def __str__(self):
return "foo"
>>> class Bar(object, metaclass = Foo):
def __str__(self):
return "bar"
>>> type(Bar)
<class '__main__.Foo'>
>>> type(Bar())
<class '__main__.Bar'>
>>> print(Bar)
foo
>>> print(Bar())
bar
元类必须从type继承,类声明的时候Python2.6和Python3.0不同:在2.6里是通过类变量__metaclass__来设置的,在3.0里是通过关键字参数metaclass来设置的。尽量使用Python3.0吧,更具体的信息可以参考手册。
Python中的元类(metaclass)
最新推荐文章于 2024-08-06 09:54:49 发布