当前位置: 首页 > 面试题库 >

TypeError:定义__new__后object()不接受任何参数

越源
2023-03-14
问题内容

我确实不明白这小段代码的错误所在:

class Personne:
    def __init__(self, nom, prenom):
        print("Appel de la méthode __init__")
        self.nom = nom
        self.prenom = prenom

    def __new__(cls, nom, prenom):
        print("Appel de la méthode __new__ de la classe {}".format(cls))
        return object.__new__(cls, nom, prenom)

personne = Personne("Doe", "John")

它给了我错误:

Traceback (most recent call last):
  File "/home/bilal/Lien vers python/21_meta_classes/1_instanciation.py", line 21, in <module>
    personne = Personne("Doe", "John")
  File "/home/bilal/Lien vers python/21_meta_classes/1_instanciation.py", line 14, in __new__
    return object.__new__(cls, nom, prenom)
TypeError: object() takes no parameters

问题答案:

在Python
3.3和更高版本中,如果您同时覆盖__new____init__,则需要避免将任何其他参数传递给object您要覆盖的方法。如果您仅覆盖这些方法之一,则可以将额外的参数传递给另一个方法(因为通常在没有您帮助的情况下会发生这种情况)。

因此,要修复您的类,请按以下__new__方式更改方法:

def __new__(cls, nom, prenom):
    print("Appel de la méthode __new__ de la classe {}".format(cls))
    return object.__new__(cls) # don't pass extra arguments here!


 类似资料:
  • 在我的OpenAPI规范中,是否有可能将参数定义为对象,而不必定义其属性(匿名对象)?更具体地说,我希望我的应用编程接口能够接受这些匿名对象的数组。 这是我所拥有的,但是我在斯瓦格编辑器中得到了一个“无效参数定义”错误。 以下是错误:

  • 问题内容: 我一直在设置元类,如下所示: 但是我只是遇到了这样定义的元类: 有什么理由比另一个更喜欢吗? 更新 :请记住,我在询问有关在类中使用和的问题。我已经在另一堂课中了解了它们之间的区别。但是在元类中,我不能用来实现缓存,因为仅在元类中创建类时才调用它。 问题答案: 如果要在创建类之前更改属性dict或更改基元组,则必须使用。当看到参数时,该类对象已经存在。另外,如果要返回除所讨论类型的新创

  • 我和这里的用户遇到了同样的问题:log4j类型genericopobjectpool不接受参数,但我一直无法找到这个问题的答案。Log4j2在附加到rollingfile时起作用,但此处列出的方法:https://logging.apache.org/log4j/2.x/manual/appenders.html显示错误“GenericObjectPool不接受参数”

  • 当尝试使用<code>Apache FOP</code>使用自定义字体(Google Lato Font)时,我遇到以下错误。我已根据文档将转换为 警告:< code>Font "Lato,normal,700 "找不到。替换为“any,normal,700”< br >警告:< code>Font "Lato,normal,400 "未找到。替换为“任何,正常,400”。 配置文件: 执行代码:

  • 我正在开发spring-boot RabbitMQ。我创建了一个死信队列,我可以在RabbitMQ管理中看到它为“d,DLE”,但没有DLK我可能错过了设置“x-dial-letter-routing-key”,问题是我不想要路由key。我的消费者很少绑定到特定的交换,我在每个交换中创建DLE,如果该交换的消费者有任何问题,那么连接到该交换的DLE接收该消息并执行依赖于用户的逻辑。但不幸的是,这不

  • 试图从CordaV1迁移到V3。它在V1中运行良好,但在使用CordaV3后,它的投掷错误- 在java.lang.Thread.Run(Thread.java:748)处,原因为:java.io.NotSerializableException:net.corda.core.contracts.TransactionState->数据(net.corda.core.contracts.contr