首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多态OOP:“子”的实例没有“basic_attack”成员member(无成员)

多态OOP:“子”的实例没有“basic_attack”成员member(无成员)
EN

Stack Overflow用户
提问于 2019-02-12 09:36:26
回答 1查看 37关注 0票数 1

我试图理解OOP中的多态性,我构建了一个怪物父类,从这个主类您可以继承oarcs、wizards和giants..but,主攻击方法是在父类中编码的,并且只有一个字符串放在变量名basic_attack中

问题是,当我在子类中调用这个攻击变量时,我得到的错误实例是“oarc”没有“basic_attack”成员giants (无成员)。

请轻松对待我,并随时检查我的代码下面。

代码语言:javascript
复制
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())
EN

回答 1

Stack Overflow用户

发布于 2019-05-27 02:49:03

好吧,基本上看起来self.basic_attack从来没有设置过。可能与self.basic_attack = basic_attackdef __init__() of class Monster上修复。

def attack()下的class Monster下的class Monster与设置basic_attack不一样。basic_attack被约束到attack()函数。

例如,让我们在非OOP代码中进行抽象;

代码语言:javascript
复制
# define a 
a = 0

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

print(test())
>> 2 

print(a)
>> 0

现在,如果我们没有在a中重新定义test()

代码语言:javascript
复制
# set a
a = 0

# define test
def test():
  return a

print(test())
>> 0

print(a)
>> 0 

现在,如果a只在test()中定义;

代码语言:javascript
复制
# 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发布的更深入的应用程序

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54646890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档