当前位置:  开发笔记 > 编程语言 > 正文

super().__ init __()中的'意外的关键字参数'

如何解决《super().__init__()中的'意外的关键字参数'》经验,为你挑选了1个好方法。

我正在写一个小文字游戏.在尝试定义类变量时,我一直收到错误.

这是类代码:

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 
    CageDoor = 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仍保持稳定.



1> ShadowRanger..:

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仍保持稳定.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有