继续讨论这个问题:Dynamically adding methods with or without metaclass,在进行动态注入时,在__new__
方法和__init__
方法中进行有何区别、好处和问题?
在参考的问题中,新方法是使用setattr
添加的。如果您在__new__
方法中这样做,则需要修改dict
参数。以同样的示例为例,代码如下:
class Meta(type)
def __new__(cls, clsname, bases, dct):
def my_method(self, x):
return x in self.letters
dct[my_method.__name__] = my_method
return super(Meta, cls).__new__(cls, clsname, bases, dct)