>我在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