gpt4 book ai didi

python - 将一个类传递给另一个类(Python)

转载 作者:太空狗 更新时间:2023-10-29 22:30:03 26 4
gpt4 key购买 nike

我现在在上课时遇到了一些麻烦,我不确定如何解决我的问题。我已经阅读了文档,但无法将那里所说的任何内容与我遇到的问题联系起来。

我正在尝试为游戏创建一些简单的类。我有一个武器类和一个人类。我正在尝试将武器传递给 Person 类(我希望这是有道理的),以便 Person (Bob) 可以使用该武器。我无法访问 Weapon 类中的方法和属性。我考虑过让 Person 成为 Weapon 的子类,以便它可以轻松调用该方法,但这对我来说似乎并不直观。 . .

class Weapon:
def __init__(self, weapon_name, weapon_damage):
self.weapon_name = weapon_name
self.weapon_damage = weapon_damage

def display_weapon_name(self):
print('Weapon Name: %s' %self.weapon_name)


class Person:

def __init__(self, person_name, health, ranged_weapon):
self.person_name = person_name
self.health = health
Weapon.ranged_weapon = ranged_weapon

def display_person_info(self):
print('Name: %s' %self.person_name)
print('Ranged Weapon :%s' %Weapon.display_weapon_name)

def ranged_attack(self, ranged_weapon, target):
target.health -=ranged_weapon.weapon_damage
print("Weapon: %s" %ranged_weapon.weapon_name)
print(target.person_name + "'s Health: "+str(target.health))

pistol = Weapon("Pistol", 40)
bob = Person("Bob", 100, pistol)

bob.display_person_info()

运行这个给我:

Name: Bob
Ranged Weapon :<function Weapon.display_weapon_name at 0x02E23030>

运行:

bob.ranged_attack(pistol, bob)

给予:

Weapon: Pistol
Bob's Health: 60

我的问题是,我是否将 Weapon 对象正确地传递给了 Person 类?在 _init__ 中写 Weapon.ranged_weapon 而不是 self.ranged_weapon 似乎很奇怪。

如何让 display_weapon_info 显示字符串“武器名称:手枪”,而不是引用?当我在 ranged_attack 中调用它时它似乎起作用,但在显示信息中不起作用。

非常感谢我能得到的任何帮助。如果之前有人问过类似的问题,我深表歉意,但我找不到任何与我的问题相关的内容。

丰富

最佳答案

Person 实际上不需要直接引用 Weapon 类;它只需要保存对作为 ranged_weapon 参数传递的任何内容的引用,并知道它可以对该对象做什么。该代码隐含地假定 ranged_weaponWeapon 的一个实例,但可以与任何与 Weapon 的瞬间适当相似的对象一起使用。

class Person:

def __init__(self, person_name, health, ranged_weapon):
self.person_name = person_name
self.health = health
self.weapon = ranged_weapon

def display_person_info(self):
print('Name: %s' %self.person_name)
# display_weapon_name already calls print; but
# you probably don't need this method at all.
self.weapon.display_weapon_name()
# Instead, do this (actually, you already do this
# in ranged_attack())
# print('Weapon: %s' % self.weapon.weapon_name)


def ranged_attack(self, ranged_weapon, target):
target.health -= self.weapon.weapon_damage
print("Weapon: %s" % self.weapon.weapon_name)
print(target.person_name + "'s Health: "+str(target.health))

关于python - 将一个类传递给另一个类(Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30005672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com