吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 769|回复: 7
收起左侧

[求助] 学习定义Python的类时命名出错

[复制链接]
Shimmer666 发表于 2023-5-2 13:27
# 为一个游戏设计一个游戏演员(Actor)基类,要求:
# 包含 名字name、血量xl、攻击力、防御力(0-0.9)、阵营(数字表示阵营编号)等属性
# 包含方法 攻击 参数为另外一个Actor (攻击前要检测是否同一阵营)数值变化为
# 被攻击者的血量 = 当前血量 – 攻击者攻击力 *(1-被攻击者防御力),
# 攻击后打印 xx攻击xx 造成多少伤害,还有多少血量
# 设计一个英雄类(Hero),继承Actor,阵营固定为1
# 设计一个怪物类(Monster),继承Actor,阵营固定为2
# 创建一个英雄对象,和一个怪物对象,英雄对象对怪物对象进行一次或多次攻击

# 一个游戏演员(Actor)基类
class Actor:
    def __init__(self, name, xl, atk, defs, team):
        self.name = name
        self.hp = xl
        self.atk = atk
        self.defs = defs
        self.team = team

    # 另外一个actor
    def atk(self, other_actor):
        # 检测是否为同一阵营
        if self.team == other_actor.team:
            print(f"{other_actor.name} 是自己人,再打我告你嗷!!")
        else:
            other_actor.xl = other_actor.hurt - self.atk * (1 - other_actor.defs)
            # 攻击后打印 xx攻击xx 造成多少伤害,还有多少血量
            print(f"{self.name} 攻击 {other_actor.name}造成了 {other_actor.hurt:.2f} 点伤害。")
            print(f"{other_actor.name} 还有 {other_actor.xl:.2f} 点血量。")


# 设计一个英雄类(Hero),继承Actor,阵营固定为1   super继承
class Hero(Actor):
    def __init__(self, name, xl, atk, defs, team=1):
        super().__init__(name, xl, atk, defs, team)


# 设计一个怪物类(Monster),继承Actor,阵营固定为2
class Monster(Actor):
    def __init__(self, name, xl, atk, defs, team=2):
        super().__init__(name, xl, atk, defs, team)


# 创建英雄对象和怪物对象
hero = Hero("帝皇侠", 100, 20, 0.1)
monster = Monster("阿里嘎多美羊羊桑", 200, 15, 0.2)

# 英雄对怪物进行一次或多次攻击
hero.atk(monster)
monster.atk(hero)

hero.atk(monster)
monster.atk(hero)

hero.atk(monster)
monster.atk(hero)






//问题是提示
Traceback (most recent call last):
   line 48, in <module>
    hero.atk(monster)
TypeError: 'int' object is not callable


我查询到是由于命名问题 可我用的继承 不知道该怎么改命名了......

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

T4DNA 发表于 2023-5-2 13:42
[Python] 纯文本查看 复制代码
class Actor:
    def __init__(self, name, xl, atknum, defs, team):
        self.name = name
        self.hp = xl
        self.atknum = atknum
        self.defs = defs
        self.team = team

    # 另外一个actor
    def atk(self, other_actor):
        # 检测是否为同一阵营
        if self.team == other_actor.team:
            print(f"{other_actor.name} 是自己人,再打我告你嗷!!")
        else:
            other_actor.xl = other_actor.hurt - self.atknum * (1 - other_actor.defs)
            # 攻击后打印 xx攻击xx 造成多少伤害,还有多少血量
            print(f"{self.name} 攻击 {other_actor.name}造成了 {other_actor.hurt:.2f} 点伤害。")
            print(f"{other_actor.name} 还有 {other_actor.xl:.2f} 点血量。")


# 设计一个英雄类(Hero),继承Actor,阵营固定为1   super继承
class Hero(Actor):
    def __init__(self, name, xl, atk, defs, team=1):
        super().__init__(name, xl, atk, defs, team)


# 设计一个怪物类(Monster),继承Actor,阵营固定为2
class Monster(Actor):
    def __init__(self, name, xl, atk, defs, team=2):
        super().__init__(name, xl, atk, defs, team)


# 创建英雄对象和怪物对象
hero = Hero("帝皇侠", 100, 20, 0.1)
monster = Monster("阿里嘎多美羊羊桑", 200, 15, 0.2)

# 英雄对怪物进行一次或多次攻击
hero.atk(monster)
monster.atk(hero)

hero.atk(monster)
monster.atk(hero)

hero.atk(monster)
monster.atk(hero)
 楼主| Shimmer666 发表于 2023-5-2 19:52
T4DNA 发表于 2023-5-2 13:42
[mw_shl_code=python,true]class Actor:
    def __init__(self, name, xl, atknum, defs, team):
       ...

AttributeError: 'Monster' object has no attribute 'hurt'
好像还是会报错
Huixingzi 发表于 2023-5-2 19:57
天轩科技 发表于 2023-5-2 20:03
Shimmer666 发表于 2023-5-2 19:52
AttributeError: 'Monster' object has no attribute 'hurt'
好像还是会报错

你的hurt变量呢??
 楼主| Shimmer666 发表于 2023-5-2 20:41
天轩科技 发表于 2023-5-2 20:03
你的hurt变量呢??

            hurt = self.atknum * (1 - other_actor.defs)
            other_actor.xl -= hurt


感谢 找到问题了
hrpzcf 发表于 2023-5-2 20:44
出错的原因是你的Actor类有一个叫atk的属性,又有一个叫atk的方法,重名了,把其中一个改成其他名字就行了,有什么困难吗?
 楼主| Shimmer666 发表于 2023-5-2 20:47
hrpzcf 发表于 2023-5-2 20:44
出错的原因是你的Actor类有一个叫atk的属性,又有一个叫atk的方法,重名了,把其中一个改成其他名字就行了 ...

是的 然后我又发现自己hurt没有定义,搞半天运行还是出错 现在定义了已经解决了 谢谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 21:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表