首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:__init__()缺少两个必需的位置参数:“no_of_arrows”和“email”

TypeError:__init__()缺少两个必需的位置参数:“no_of_arrows”和“email”
EN

Stack Overflow用户
提问于 2021-02-02 10:36:51
回答 1查看 915关注 0票数 2

我使用多重继承特性编写了python3.9代码。我使用中的朱庇特笔记本来编写和运行这段代码。它在向导类TypeError init()方法中给出了一个:

代码语言:javascript
复制
# multiple inheritance

class User:
    def __init__(self, email):
        self.email = email

    def sign_in(self):
        print('Logged in.')

    def attack(self):
        print('User attack.')


class Wizard(User):
    def __init__(self, name, power, email):
        super().__init__(email)
        self.name = name
        self.power = power

    def attack(self):
        super().attack()
        print(f'Attacking with power of {self.power}.')


class Archer(User):
    def __init__(self, name, no_of_arrows, email):
        super().__init__(email)
        self.name = name
        self.no_of_arrows = no_of_arrows

    def attack(self):
        print(f'Attacking with arrows. Arrows left - {self.no_of_arrows}.')

    def check_arrows_count(self):
        print(f'{self.no_of_arrows} left.')

    def run(self):
        print('run')


class HybridAttacker(Wizard, Archer):
    def __init__(self, name, power, no_of_arrows, email):
        Wizard.__init__(self, name, power, email)
        Archer.__init__(self, name, no_of_arrows, email)


hybrid_attacker = HybridAttacker('Tom', 50, 20, 'tom@gmail.com')
print(hybrid_attacker)

下面是带有TypeError的输出:

代码语言:javascript
复制
*TypeError Traceback (most recent call last) <ipython-input-11-4769f9f86581> in <module>
     45 
     46 
---> 47 hybrid_attacker = HybridAttacker('Tom', 50, 20, 'tom@gmail.com')
     48 print(hybrid_attacker)
<ipython-input-11-4769f9f86581> in __init__(self, name, power, no_of_arrows, email)
     41 class HybridAttacker(Wizard, Archer):
     42     def __init__(self, name, power, no_of_arrows, email):
---> 43         Wizard.__init__(self, name, power, email)
     44         Archer.__init__(self, name, no_of_arrows, email)
     45 
<ipython-input-11-4769f9f86581> in __init__(self, name, power, email)
     14 class Wizard(User):
     15     def __init__(self, name, power, email):
---> 16         super().__init__(email)
     17         self.name = name
     18         self.power = power
TypeError: __init__() missing 2 required positional arguments: 'no_of_arrows' and 'email'*

请帮我找出错误是什么。

当我在向导类super().init(email) init()方法中注释掉时,代码正在运行,没有任何错误。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-02 11:08:56

我不确定您在这里想要实现什么,但是您必须记住,所有的__init__都将被HybridAttacker调用。对于每个函数,您都忽略了params,所以您需要使用**kwargs,然后才能得到所需的。

所以你的__init__函数看起来就像

代码语言:javascript
复制
class Wizard(User):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.name = kwargs.get('name')
        self.power = kwargs.get('power')

HybridAttacker可以为每个家长的init指定params:

代码语言:javascript
复制
class HybridAttacker(Wizard, Archer):
    def __init__(self, name, power, no_of_arrows, email):
        Wizard.__init__(self, name=name, power=power, email=email)
        Archer.__init__(self, name=name, no_of_arrows=no_of_arrows)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66007993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档