在Python中,__new__用于初始化不可变类型,__init__通常用于初始化可变类型。如果__init__将其从语言中删除,该怎么办(轻松)?
__new__
__init__
例如,
class A: def __init__(self, *, x, **kwargs): super().__init__(**kwargs) self.x = x class B(A): def __init__(self, y=2, **kwargs): super().__init__(**kwargs) self.y = y
可以这样重写__new__:
class A_N: def __new__(cls, *, x, **kwargs): obj = super().__new__(cls, **kwargs) obj.x = x return obj class B_N(A_N): def __new__(cls, y=2, **kwargs): obj = super().__new__(cls, **kwargs) obj.y = y return obj
为澄清问题的范围:这不是一个问题关于如何__init__以及__new__是使用或它们之间有什么区别。这是一个问题,如果__init__从语言中删除将会发生什么。有什么坏事吗?事情会变得很难或不可能吗?
您可以在__init__中进行的所有操作都可以在中完成__new__。
那么,为什么要使用__init__? 因为您不必将实例存储在变量中(obj在示例代码中),以后再麻烦返回它。您可以专注于您真正想做的事情–初始化可变对象。
obj