Python中的元类(metaclass)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值