我正在写一个小文字游戏.在尝试定义类变量时,我一直收到错误.
这是类代码:
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, inCageDoor = CageDoor() *File Location* name="Cage Door" TypeError: __init__() got an unexpected keyword argument 'name'
ShadowRanger.. 9
Door
's __init__
不接受name
或者description
,所以调用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
的构造原型的变化,Door
不必; 如果没有提供默认值,调用者将需要传递正确的参数(因此在Scenery
不给它们有用的默认值的情况下向构造函数添加新参数的形式很差),但Door
仍保持稳定.
Door
's __init__
不接受name
或者description
,所以调用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
的构造原型的变化,Door
不必; 如果没有提供默认值,调用者将需要传递正确的参数(因此在Scenery
不给它们有用的默认值的情况下向构造函数添加新参数的形式很差),但Door
仍保持稳定.