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

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

 2007-03-29 12:10:53 来源:WEB开发网   
核心提示: >>> d.__dict__, d.a5, d.a1({'a5': 'instance d'}, 'instance d', 'A')查找一个不与实例关联的属性时有一个技巧,即先在实例的类中查找,Python
>>> d.__dict__, d.a5, d.a1
     
({'a5': 'instance d'}, 'instance d', 'A')

查找一个不与实例关联的属性时有一个技巧,即先在实例的类中查找,然后再在从所有的超类中查找。这一过程中父类被检查的顺序被称为这个类的 方法解析顺序,您可以利用以下这个(元)方法 .mro() 看出该顺序 (但只能是从类对象中看到):

>>> [k.__name__ for k in d.__class__.mro()]
     
['D', 'C', 'A', 'B', 'object']

换句话说,访问 d.attr 时首先是在 d.__dict__ 中,然后在 D.__dict__ , C.__dict__ , A.__dict__ , B.__dict__ ,最后才是在 object.__dict__ 中查找,如果在任意一个地方都未找到这个名字,就会产生一个 AttributeError 。

注意,从未在查找过程中提到过元类。

元类与祖先

这里有一个普通的继承的简单例子,我们定义了一个 Noble 基类,它有子类 Prince , Duke , Baron 等等。

清单 3. 属性继承

>>> for s in "Power Wealth Beauty".split(): exec '%s="%s"'%(s,s)
...
>>> class Noble(object):   # ...in fairy tale world
...   attributes = Power, Wealth, Beauty
...
>>> class Prince(Noble):
...   pass
...
>>> Prince.attributes
('Power', 'Wealth', 'Beauty')

类 Prince 继承了 Noble 的属性, Prince 类的实例仍然遵循上述的查找链。

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

Tags:Python 编程 理解

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