为什么调用父类的 __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进来了

0
0

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2121 学习 · 551 问题

查看课程