跨类调用问题
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
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的内容
你这样是循环引用的,不建议用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()
这段代码有一些错误,我来解释一下:
在 Player 类的 atk 方法中,self.game_enemy 是一个字符串,但 suffer_beating() 方法需要传入一个 Enemy 类型的实例。因此,需要将 self.game_enemy 的类型更改为 Enemy 类型。
在 Player 类的 atk 方法中,打印语句使用了 self.Enemy.game_skill,但实际上应该使用 self.game_enemy.game_skill,因为 game_enemy 是该方法的参数,而不是类属性。
在 Enemy 类的 suffer_beating 方法中,打印语句中使用了 self.Play.game_enemy,但实际上应该使用 self,因为 suffer_beating 方法中没有 Play 属性。
下面是修正后的代码:
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.game_enemy.game_skill}攻击了敌人")
self.game_enemy.suffer_beating()
class Enemy:
def __init__(self, game_skill):
self.game_skill = game_skill
def suffer_beating(self):
print(f"{self}受伤了,头顶爆字")
CJ = Player("321")
power = Enemy("123")
CJ.atk(power)
在上述代码中,我更正了 Player 类中的 atk 方法和 Enemy 类中的 suffer_beating 方法中的错误,并在最后调用了 CJ.atk(power) 来进行一次攻击。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!