WEB开发网
开发学院软件开发Python Python 中的元类编程 - 理解继承的奥秘和实例创建... 阅读

Python 中的元类编程 - 理解继承的奥秘和实例创建

 2007-03-29 12:10:53 来源:WEB开发网   
核心提示: 清单 4. 实例中的属性>>> charles=Prince()>>> charles.attributes# ...remember, not the real world('Power', 'Wealth', '

清单 4. 实例中的属性

>>> charles=Prince()
>>> charles.attributes    # ...remember, not the real world
('Power', 'Wealth', 'Beauty')

如果 Duke 碰巧有一个定制元类,那么它能够以以下方式获得一些属性:

>>> class Nobility(type): attributes = Power, Wealth, Beauty
     
...
     
>>> class Duke(object): __metaclass__ = Nobility
     
...

Duke是一个类,也是元类 Nobility 的一个实例——属性的查找过程与其他对象一致:

>>> Duke.attributes
     
('Power', 'Wealth', 'Beauty')

但是 Nobility 不是 Duke 的超类,所以这就是为什么 Duke 的 实例会找到 Nobility.attributes 的原因:

清单 5. 属性与元类

>>> Duke.mro()
[<class '__main__.Duke'>, <type 'object'>]
>>> earl = Duke()
>>> earl.attributes
[...]
AttributeError: 'Duke' object has no attribute 'attributes'

元类属性的可用性是不会传递的,也就是说,元类的属性是对它的实例是可用的,但是对它的实例的实例是不可用的。这正是元类与超类的主要不同。下图强调了继承与实例化的异同。

图 1. 实例化与继承

因为 earl 仍然有一个类,因而您可以间接地得到其属性:

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Python 编程 理解

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接