如何使用 PyCharm 继承抽象类



>我在Python IDLE中编写了一个代码,其中包含一个抽象类和一个继承该抽象类*的类(两个类位于同一文件夹中(。效果很好。我想将该代码复制并粘贴到 PyCharm 中。我制作了两张卡片,一张带有抽象类,另一张带有继承该类的类,但我收到此错误:

    class Swords(Weapon):
TypeError: module.__init__() takes at most 2 arguments (3 given)

我很困惑,因为我没有更改代码中的任何内容。这是代码

第一张牌:武器

from abc import ABC, abstractmethod

class Weapon(ABC):
    @abstractmethod
    def __init__(self, name):
        self.name = name

第二张牌:剑

import Weapon

class Swords(Weapon):
    def __init__(self, name, attack_points, price):
        super().__init__(name)
        self.attack_points = attack_points
        self.price = price
    def info(self):
        info = self.name + " is attack-weapon that increases attack points!"
        return info
    def __str__(self):
        return "Sword name: {}nSword attack: +{}nSword price: {}n".format(self.name,
                                                                             self.attack_points,
                                                                             self.price)

Elf_Sword = Swords("Elf Sword", 1, 50)
Fire_Sword = Swords("Fire Sword", 2, 80)
Space_Sword = Swords("Space Sword", 3, 120)

print(Elf_Sword)

请告诉我我做错了什么?

您可能将Weapon类放在名为 Weapon.py 的模块中,并且您只是导入模块,而不是类。

它是否是ABC在这里并不重要。

作为一般的命名经验法则,

  • 模块通常应为小写
  • 类应该是帕斯卡大小写和单数

weapon.py

class Weapon:
    pass

sword.py

from weapon import Weapon
class Sword(Weapon):
    pass

无法导入类。您必须从这些模块导入模块或类。

在您的情况下,语法是

from file_where_weapon_is import Weapon

最新更新