Python 使用 __new__ 没有默认初始化

Python use __new__ with no default init

我有以下代码在没有传递参数和传递参数时创建水果对象。

我正在努力实现,为此我得到了TypeError: object() takes no parameters

class Fruit:
    
    def __new__(cls, *args, **kwargs):
        return object.__new__(cls,"empty name")
        
    def __init__(self, fruitname):
        self.__fruit_name = fruitname

预期代码有效。

  apple = Fruit("apple")
  empty = Fruit()

我认为以下内容足以满足您的描述:

class Fruit:

  def __init__(self, fruitname = "empty name"):
    self.__fruit_name = fruitname

错误的原因是object.__new__()(这个函数不需要任何参数)使用不当,实际上这里不需要。

执行此操作的正确方法是子类化:

class Fruit(object):
    def __new__(cls, *args, **kw):
        return super().__new__(cls)

您可能会看到的代码是:

TypeError: object.__new__() takes exactly one argument (the type to instantiate)

因为您传递了一个不受支持的额外参数。

但是 __new__ 是多余的。您根本不需要在这里使用它,除非您正在做一些花哨的元编程,否则您可能根本不需要重写 __new__

只需初始化 __init__ 中的所有变量,就可以了。