Python元类与常规类继承有什么不同?

这个问题在这里已经有了答案:

  • Python中的元类是什么? 14个答案

  • 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?

    下一篇: Understanding metaclass and inheritance in Python