这可能是
一个太多的开放式问题,但我现在才开始学习 Python 中的元类,我不明白元类与仅从父类继承子类有什么不同,例如
class child(parent):
这难道不是与元类相同的目的吗? 我想也许我不明白元类的目的。
区别在于,从类继承不会影响类的创建方式,它只影响类实例的创建方式。 如果您这样做:
class A(object):
# stuff
class B(A):
# stuff
那么 A 在创建 B 时没有任何机会"钩入"。 创建 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, ""))