我正在写一个小文字游戏.在尝试定义类变量时,我一直收到错误.
这是类代码:
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.")
Run Code Online (Sandbox Code Playgroud)
main.py代码:
from tiles import CageDoor
CageDoor = CageDoor()
Run Code Online (Sandbox Code Playgroud)
而错误:
File "main.py", line 3, in <module>
CageDoor = CageDoor()
*File Location*
name="Cage Door"
TypeError: __init__() got an unexpected keyword argument 'name'
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
然后它将无缝传递除了它用于下一个__init__链的两个参数之外的所有参数.的优点和接受传球*args及**kwargs的是,即使Scenery的构造原型的变化,Door不必; 如果没有提供默认值,调用者将需要传递正确的参数(因此在Scenery不给它们有用的默认值的情况下向构造函数添加新参数的形式很差),但Door仍保持稳定.
| 归档时间: |
|
| 查看次数: |
2618 次 |
| 最近记录: |