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

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

 2007-03-29 12:10:53 来源:WEB开发网   
核心提示: 某些实例对象就是类本身,并且所有的类都是相应 元类的实例,Python 中的元类编程 - 理解继承的奥秘和实例创建(2),甚至类也只能通过实例化机制生成,通常,那么就是它,但如果不是,类是内建的标准的元类 type 的实例;只有当我们指定元类而不是指定 type 时,才需要考虑元类编程

某些实例对象就是类本身,并且所有的类都是相应 元类的实例,甚至类也只能通过实例化机制生成。通常,类是内建的标准的元类 type 的实例;只有当我们指定元类而不是指定 type 时,才需要考虑元类编程。我们也称用来实例化对象的类为那个对象的 类型。

运行实例化想法的 正交是继承的概念。这里,一个类可以有一个或多个父亲,而不是只有一个惟一的类型。并且父亲还可以有父亲,创建一个传递的子类关系后,可以方便地利用内建的 issubclass() 函数来判断继承关系。例如,如果我们定义一些类和一个实例:

清单 1. 典型的继承层次

>>> class A(object): a1 = "A"
...
>>> class B(object): a2 = "B"
...
>>> class C(A,B):  a3 = "C(A,B)"
...
>>> class D(C):   a4 = "D(C)"
...
>>> d = D()
>>> d.a5 = "instance d of D"

然后我们可以测试这些关系:

清单 2. 测试祖先

>>> issubclass(D,C)
True
>>> issubclass(D,A)
True
>>> issubclass(A,B)
False
>>> issubclass(d,D)
[...]
TypeError: issubclass() arg 1 must be a class

现在,一个很有趣的问题——理解超类与元类的不同所必需的一个问题——是像 d.attr 这样的属性是如何被解析的。简单起见,我们只讨论标准的查找规则,而不是回到 .__getattr__() 。这个解决方案的第一步是在 d.__dict__ 中查找名字 attr ,如果找到了,那么就是它,但如果不是,一些有趣的事情将会发生,例如:

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

Tags:Python 编程 理解

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