为什么调用父类的 __new__ 方法要传入子类的 cls
来源:8-6 通过元类实现orm-1

笛梦少年
2022-07-12
为什么调用父类的 __new__
方法要传入子类的 cls
不过有趣的是,我把 args 里的值改了之后,生成的类对象的名字也变了 ~
但是这好像就和子类的 cls 没有任何关系,为什么还要穿这个参数呐
而且调用父类的 __new__
传入的 不应该是父类class嘛
class MetaClass(type):
def __new__(cls, *args, **kwargs):
# 将生成对象的过程委托给
# 这里生成什么对象取决于 传给 args 的参数
# 因为参数中是 User 所以生成的对象叫 User
# args = ('hello',) + args[1:]
# args[2]['__qualname__'] = 'helloUser'
print(super().__new__(cls, *args, **kwargs))
print(isinstance(super().__new__(cls, *args, **kwargs), cls))
print(id(super().__new__(cls, *args, **kwargs)) == id(cls))
print(cls)
return super().__new__(cls, *args, **kwargs)
class User(metaclass=MetaClass):
pass
user = User()
写回答
1回答
-
bobby
2022-07-15
MetaClass 不是user的父类,这是生成user的制造者, 要制造user当然需要传递具体的制造的cls进来了
00
相似问题