Python 中的元类编程 - 理解继承的奥秘和实例创建
2007-03-29 12:10:53 来源:WEB开发网Michele 和 David 在 developerWorks 上发表的第一篇关于元类编程的文章收到了很多读者反馈, 其中,有一些是来自于那些希望掌握 Python 元类的精妙之处但仍感困惑的读者。本文将重温元类的使用和它们与面向对象编程概念的关系,对比类的实例化与继承,区分类方法和元方法,以及解释并解决元类冲突。
元类及其不足
在 Python中的元类编程,第 1 部分中,我们介绍了元类的概念,展示了它们的一些能力,还示例了元类在解决类和库在运行时的动态定制等这类问题方面的应用。
事实证明那篇文章是非常受欢迎,但是在简要的篇幅中还是有些细节未阐明。根据读者的反馈和在comp.lang.python中的讨论,我们将在本文中阐述一些使用技巧。特别地,我们认为以下几点对任何希望熟练掌握元类的程序员是至关重要的:
用户必须理解元类编程和传统面向对象编程的不同点和相同点(单继承和多继承)。
Python 2.2 增加了内建的函数 staticmethod() 和 classmethod() ,用于创建那些在调用时无需实例对象的方法。在某种程度上, 类方法在目的上与元类中定义的(元)方法有重叠,但是精确的相似和不同也在很多程序员的头脑中产生了混淆。
用户应该理解元类型冲突的原因和解决方案,当您想使用多个定制的元类时,这将非常必要。我们将解释元类 合成的概念。
实例化与继承
许多程序员会混淆元类和基类的不同。从“定义”类的表面上来区分,两者看上去是类似的。可一旦深入下去,两个概念就区别开来。
在举例之前,明确一些术语是非常有意义的。 实例 是由类“制造”的 Python 对象;类充当实例的一种模版。每一个实例只能属于一个类(但一个类可以有多个实例)。我门经常说的实例对象――或“简单实例”――是“最终的”,即意味着不能作为其他对象的模版(但它仍然可能是一个 工厂或 代表,这二者的目的有重叠)。
更多精彩
赞助商链接