现在的位置: 首页 > 综合 > 正文

Python中的元类(metaclass)

2013年09月15日 ⁄ 综合 ⁄ 共 766字 ⁄ 字号 评论关闭

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吧,更具体的信息可以参考手册

抱歉!评论已关闭.