我试图理解OOP中的多态性,我构建了一个怪物父类,从这个主类您可以继承oarcs、wizards和giants..but,主攻击方法是在父类中编码的,并且只有一个字符串放在变量名basic_attack中
问题是,当我在子类中调用这个攻击变量时,我得到的错误实例是“oarc”没有“basic_attack”成员giants (无成员)。
请轻松对待我,并随时检查我的代码下面。
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())发布于 2019-05-27 02:49:03
好吧,基本上看起来self.basic_attack从来没有设置过。可能与self.basic_attack = basic_attack在def __init__() of class Monster上修复。
def attack()下的class Monster下的class Monster与设置basic_attack不一样。basic_attack被约束到attack()函数。
例如,让我们在非OOP代码中进行抽象;
# 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中OOP的简短介绍;快速和简单;面向对象的编程,从地面到皮卡丘和湾区快速交通(BART)的例子。
下面是OOP向LinkedIn;LinkedOut发布的更深入的应用程序
https://stackoverflow.com/questions/54646890
复制相似问题