Как наследовать абстрактный класс с PyCharm - PullRequest
1 голос
/ 17 апреля 2019

Я написал код на 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)

Пожалуйста, сообщитемне что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 17 апреля 2019

Возможно, у вас есть Weapon класс в модуле с именем Weapon.py, и вы просто импортируете модуль, а не класс.

Независимо от того, является ли это ABC, здесь не имеет значения.

Как общее практическое правило именования,

  • Модули, как правило, должны быть строчными
  • Классы должны быть в PascalCase и в единственном числе

arms.py

class Weapon:
    pass

sword.py

from weapon import Weapon

class Sword(Weapon):
    pass
1 голос
/ 17 апреля 2019

Вы не можете импортировать классы. Вы должны импортировать модули или классы из этих модулей.

В вашем случае синтаксис

from file_where_weapon_is import Weapon
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...