У меня проблемы с классами в минуту, и я не уверен, как решить мою проблему. Я читал документы, и я не могу подключить что-либо, сказанное там, с проблемой, с которой я сталкиваюсь.Передача класса другому классу (Python)
Я пытаюсь сделать несколько простых классов для игры. У меня есть класс Weapon и класс Person. Я пытаюсь передать класс Weapon to 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 правильно к Класс человека? Кажется странным писать Weapon.ranged_weapon в _init__, а не self.ranged_weapon.
Как я могу заставить display_weapon_info показать строку «Weapon Name: Pistol», а не ссылку? Кажется, это работает, когда я называю это в ranged_attack, но не в информации о дисплее.
Действительно оцените любую помощь, которую я могу получить. Извините, если раньше задавался аналогичный вопрос, но я не мог найти ничего, что мог бы связать с моей проблемой.
Rich
Большое спасибо за помощь; Мне это удалось! – Rytchbass