# python中一切都是对象 # 类也是一个对象,那么类是由谁生成的呢?由type生成 # 定义一个元类,必须继承type class Mytype(type): def __call__(self, *args, **kwargs): pass # 指定类由Mytype生成 class Satori(metaclass=Mytype): def __init__(self, name, age): self.name = name self.age = age satori = Satori("satori", 18) # 此时打印会有什么结果 # 此时Satori这个类不再由type生成,而是由我们指定的Mytype生成 # 当Satori加上括号时,本质上是执行元类的call方法,但是Mytype却并没有返回,所以打印的是一个None print(satori) # None
# python中一切都是对象 # 类也是一个对象,那么类是由谁生成的呢?由type生成 # 定义一个元类,必须继承type class Mytype(type): def __call__(self, *args, **kwargs): obj = object.__new__(self) # 这句话表示生成self的实例对象,而这里的self指的就是satori self.__init__(obj, *args, **kwargs) return obj # 指定类由Mytype生成 class Satori(metaclass=Mytype): def __init__(self, name, age): self.name = name self.age = age satori = Satori("satori", 18) # 此时打印会有什么结果 # 此时Satori这个类不再由type生成,而是由我们指定的Mytype生成 # 当Satori加上括号时,本质上是执行元类的call方法,但是Mytype却并没有返回,所以打印的是一个None # 所以要在call方法中返回Satori的实例对象 print(satori) # <__main__.Satori object at 0x05A33990> print(satori.__dict__) # {'name': 'satori', 'age': 18}