RicardoM.Lu1 2023-02-21 14:30 采纳率: 82.1%
浏览 23
已结题

在学习跨类调用时遇到问题

跨类调用问题

class Player:
    def __init__(self,game_player):
        self.game_player = game_player
    def atk(self,game_enemy):
        self.game_enemy = game_enemy
        print(f"{self.game_player}使用{self.Enemy.game_skill}攻击了敌人")
        self.game_enemy.suffer_beating()
class Enemy:
    def __init__(self,game_skill):
        self.game_skill = game_skill
    # def __str__(self):
    #     return f"{self.}"
    def suffer_beating(self):
        print(f"{self.Play.game_enemy}受伤了,头顶爆字")
CJ = Player("321")
power = Enemy("123")
CJ.atk("xz")


跨类没有办法使用变量

报错:

Traceback (most recent call last):
  File "/home/tarena/month01/day11/homeworlk.py", line 26, in <module>
    CJ.atk("xz")
  File "/home/tarena/month01/day11/homeworlk.py", line 15, in atk
    print(f"{self.game_player}使用{self.Enemy.game_skill}攻击了敌人")
AttributeError: 'Player' object has no attribute 'Enemy'

我希望能正确输出我代码中两个print的内容

  • 写回答

3条回答 默认 最新

  • myenjoy_1 2023-02-21 14:44
    关注

    你这样是循环引用的,不建议用A引用B,B在引用A。想想在构造A对象的时候,B对象还没有建立,就初始化A对象这是不好的做法,尽管也有办法塞入进去,但Python采用的是引用计数法对内存进行回收的,这样的内存会导致内存泄漏的产生。如下代码改成:

    class Enemy:
        def __init__(self, game_skill):
            self.game_skill = game_skill
    
        def suffer_beating(self):
            print(f"{self.game_skill}受伤了,头顶爆字")
    
    
    class Player:
        def __init__(self, game_player, enemy: Enemy):
            self.game_player = game_player
            self.Enemy = enemy
    
        def atk(self):
            print(f"{self.game_player}使用{self.Enemy.game_skill}攻击了敌人")
            self.Enemy.suffer_beating()
    
    
    power = Enemy("123")
    CJ = Player("321", power)
    CJ.atk()
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月22日
  • 已采纳回答 2月21日
  • 创建了问题 2月21日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度