请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

为什么调用父类的 __new__ 方法要传入子类的 cls

为什么调用父类的 __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()

正在回答 回答被采纳积分+3

1回答

bobby 2022-07-15 22:30:33

MetaClass 不是user的父类,这是生成user的制造者, 要制造user当然需要传递具体的制造的cls进来了

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信