Python元类与常规类继承有什么不同?
这个问题在这里已经有了答案:
class AccessorType(type):
def __init__(self, name, bases, d):
type.__init__(self, name, bases, d)
accessors = {}
prefixs = ["get_", "set_", "del_"]
for k in d.keys():
v = getattr(self, k)
for i in range(3):
if k.startswith(prefixs[i]):
accessors.setdefault(k[4:], [None, None, None])[i] = v
for name, (getter, setter, deler) in accessors.items():
# create default behaviours for the property - if we leave
# the getter as None we won't be able to getattr, etc..
# [...] some code that implements the above comment
setattr(self, name, property(getter, setter, deler, ""))
不同之处在于从类继承不会影响类的创建方式,它只影响类的实例是如何创建的。 如果你这样做:
class A(object):
# stuff
class B(A):
# stuff
那么A创建B时就没有任何机会“挂钩”。 A的方法可以在创建B的实例时调用,但不能在创建B类本身时调用。
元类允许您为创建类时定义自定义行为。 请参考我标记为重复的问题,以了解元类如何工作的例子,并说服自己在这些例子中存在一些无法通过正常继承实现的效果。
链接地址: http://www.djcxy.com/p/6983.html上一篇: How are Python metaclasses different from regular class inheritance?