gpt4 book ai didi

python - super().__init__() 中的“意外关键字参数”

转载 作者:太空狗 更新时间:2023-10-29 22:25:40 32 4
gpt4 key购买 nike

我正在写一个小型文字游戏。尝试定义类变量时,我不断收到错误消息。

这是类代码:

class Scenery():
def __init__(self,name,description):
self.name=name
self.description=description

class Door(Scenery):
def __init__(self,openstatus,lockstatus):
self.openstatus=openstatus
self.lockstatus=lockstatus
super().__init__(name,description,openstatus,lockstatus)

class CageDoor(Door):
def __init__(self):
super().__init__(lockstatus=False,
openstatus=False,
name="Cage Door",
description="It's the door to the cage.")

main.py代码:

from tiles import CageDoor

CageDoor = CageDoor()

错误:

  File "main.py", line 3, in <module>
CageDoor = CageDoor()
*File Location*
name="Cage Door"
TypeError: __init__() got an unexpected keyword argument 'name'

最佳答案

Door__init__ 不接受 namedescription,所以 中的调用CageDoor.__init__(它将控制传递给 Door.__init__ 因为 super() 确定它是继承层次结构中的下一个类)将失败。

Door.__init__ 更改为:

class Door(Scenery):
def __init__(self,openstatus,lockstatus, *args, **kwargs):
self.openstatus=openstatus
self.lockstatus=lockstatus
super().__init__(*args, **kwargs)

然后它将除了它使用的两个参数之外的所有参数无缝地传递给链上的下一个 __init__。接受和传递 *args**kwargs 的好处是,即使 Scenery 的构造函数原型(prototype)发生变化,Door 不必;如果没有提供默认值,调用者将需要传递正确的参数(因此向 Scenery 的构造函数添加新参数而不给它们有用的默认值是糟糕的形式),但是 Door 保持稳定。

关于python - super().__init__() 中的“意外关键字参数”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34324247/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com