Полиморфизм ООП: Экземпляр 'child' не имеет memberpylint 'basic_attack' (нет члена) - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь понять полиморфизм в ООП, я построил родительский класс монстров, от этого основного класса вы можете наследовать весла, волшебников и гигантов ... но основной метод атаки закодирован в родительском классе монстров, иесть только строка, которая помещается в имя переменной basic_attack

Проблема в том, что когда я вызываю эту переменную атаки в веслах, волшебниках или гигантах в дочерних классах, я получаю эту ошибку Экземпляр 'oarc' не имеет memberpylint 'basic_attack' (нет члена)

, пожалуйста, будьте осторожны и не стесняйтесь просматривать мой код ниже.

class monster:
    def __init__(self, damage, speed, skill):
        self.damage = damage
        self.speed = speed
        self.skill = skill 

    def attack(self):
        basic_attack = "you've been attacked by "
        return basic_attack

class oarc(monster):
    def __init__(self, damage, speed, skill, oarc_data):
        super().__init__(damage, speed, skill)
        self.oarc_data = oarc_data

    def attack(self):
        return self.basic_attack + self.oarc_data

class wizard(monster):
    def __init__(self, damage, speed, skill, wizard_data):
        super().__init__(damage, speed, skill)
        self.wizard_data = wizard_data

    def attack(self):
        return self.basic_attack + self.wizard_data

class giant(monster):
    def __init__(self, damage, speed, skill, giant_data):
        super().__init__(damage, speed, skill)
        self.giant_data = giant_data

    def attack(self):
        return self.basic_attack + self.giant_data

oarc_object = oarc(56, 150, 'ugly', 'Oarc')
wizard_object = wizard(20, 100, 'fast', 'Wizard')
giant_object = giant(100, 20, 'strong', 'Giant')

list = [oarc_object, wizard_object, giant_object]

for each in list:
    print(each.attack)

print(oarc_object.attack())

1 Ответ

0 голосов
/ 27 мая 2019

Хорошо, в основном похоже, что self.basic_attack никогда не устанавливается.Возможно, можно исправить с self.basic_attack = basic_attack в def __init__() из class Monster.

basic_attack = "you've been attacked by " в def attack() в class Monster не совпадает с настройкой basic_attack.Это basic_attack ограничено функцией attack().

Например, давайте абстрагироваться от не-ООП кода;

# define a 
a = 0

def test():
  # define out
  a = 2
  # output out
  return a

print(test())
>> 2 

print(a)
>> 0

Теперь, если мы не переопределим a в test():

# set a
a = 0

# define test
def test():
  return a

print(test())
>> 0

print(a)
>> 0 

Теперь, если a было определено только в test();

# define test
def test():
  # set a
  a = 2
  # output
  return a

print(test())
>> 2

print(a)
>> NameError: name 'a' is not defined

Надеюсь, это поможет.Хорошего дня!

Вот краткое введение в ООП на Python; Быстро и просто;Объектно-ориентированное программирование с нуля на примерах из Pikachu и Bay Area Rapid Transit (BART)

А вот немного более глубокое применение ООП для публикации в LinkedIn; LinkedOut

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