这可能是一个太过开放的问题,但我现在刚开始学习Python中的元类,并且我不明白元类与仅仅让子类继承父类之间有什么区别,例如
class child(parent):
这样做不是与元类达到了相同的目的吗?我想也许我不理解元类的目的。
这可能是一个太过开放的问题,但我现在刚开始学习Python中的元类,并且我不明白元类与仅仅让子类继承父类之间有什么区别,例如
class child(parent):
这样做不是与元类达到了相同的目的吗?我想也许我不理解元类的目的。
不同之处在于从一个类继承并不会影响如何创建 类,它只会影响如何创建类的实例。如果你这样做:
class A(object):
# stuff
class B(A):
# stuff
那么当B被创建时,A就没有任何机会“hook in”。在创建B的实例时可以调用A的方法,但不能在创建类B本身时调用。
元类允许您定义在创建类时的自定义行为。请参阅我标记为重复的问题,了解元类如何工作的示例,并确信在这些示例中存在您无法通过普通继承实现的效果。
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, ""))