使用Python元类A
创建一个新类B
。你知道吗
当C
从B
继承时,为什么调用A
的__new__
方法?你知道吗
class A(type):
def __new__(cls, name, bases, attrs):
print(" call A.__new__ ")
return type.__new__(cls, name, bases, attrs)
B = A("B", (), {})
class C(B):
pass
python test.py
call A.__new__
call A.__new__
Tags:
类是元类的实例,默认元类
type
是从object
派生的。因此,元类遵循创建object
-__new__
实例的规则来构造实例,__init__
可以初始化它。你知道吗当我们的类是一个元类时也会发生同样的情况—它仍然是一个
object
并且表现为这样。你知道吗重申一下,如果
a
是A
的实例,那么A.__new__
用于创建a
。这同样适用于类和元类,因为前者是后者的实例。你知道吗类不从其元类继承
__new__
。类有一个元类,元类__new__
用于创建类。你知道吗从类(元类的实例)继承时,元类也会被继承。这意味着子类也是元类的实例。因此,元类的
__new__
和__init__
都用于构造和初始化这个实例。你知道吗这样做的目的是元类存在于define how classes are created。这包括子类。为每个子类调用
__new__
允许元类对新的类主体、附加的基和名称空间以及关键字作出反应。你知道吗相关问题 更多 >
编程相关推荐