首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python面向对象编程方法

python面向对象编程方法
EN

Stack Overflow用户
提问于 2017-04-01 12:18:54
回答 1查看 314关注 0票数 0

我已经定义了下面的代码,但是关于方法loaddamage似乎有一些问题。

(根据ShadowRanger的建议编辑):

代码语言:javascript
复制
class RangedWeapon(Weapon):
        def __init__(self, name, min_dmg, max_dmg):
            super().__init__(name, min_dmg, max_dmg)
            self.shots=0

        def shots_left(self):
            return self.shots

        def load(self, ammo):
            if ammo.weapon_type()==self.name:
                self.shots+=ammo.get_quantity()
                ammo.remove_all()

        def damage(self):
            if self.shots==0:
                return 0
            else:
                self.shots-=1
                return super().damage()

_

代码语言:javascript
复制
bow = RangedWeapon('bow', 10, 40)
crossbow = RangedWeapon('crossbow', 15, 45)
arrows = Ammo('arrow', bow, 5)
bolts = Ammo('bolt', crossbow, 10)

bow.load(arrows)
print(bow.shots_left()) # should return 5
print(arrows.get_quantity()) #should return 0

但是对于print(bow.shots_left()),我得到了0,print(arrows.get_quantity())我得到了5。它们是颠倒的。我想我的问题是我没有装载弹药量?我不是很确定。任何帮助都将不胜感激。谢谢!

代码语言:javascript
复制
class Ammo(Thing):
    def __init__(self, name, weapon, quantity):
        self.name=name
        self.weapon=weapon
        self.quantity=quantity

    def get_quantity(self):
        return self.quantity

    def weapon_type(self):
        return self.weapon.name

    def remove_all(self):
        self.quantity=0
EN

回答 1

Stack Overflow用户

发布于 2017-04-01 12:24:52

主要问题:Ammoweapon_type是一个方法,而不是属性或属性,而且你没有调用它,所以你是在将方法本身与name进行比较,而不是调用它的结果。这就是为什么load什么都不做的原因;没有一个方法等于一个字符串。

其他问题:

看起来您是在类上调用方法,而不是在实例上。将ammo (实例)作为参数传递,然后调用Ammo (类)上的方法。

类似地,您的damage方法可能应该调用super().damage()而不是Weapon.damage(),因为后者不使用您的实例状态。而且您还会遇到一些错别字(shotsshot),这应该会使这段代码在其他方面不起作用。

简而言之:这段代码以一百万种方式被破坏,在修复前面的问题时,您将遇到每一种方式。

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

https://stackoverflow.com/questions/43152782

复制
相关文章

相似问题

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