Merhabalar. Python’da sınıflarla ilgili alıştırma yapıyorken, miras aldığım sınıfın bir niteliğini değiştirme konusunda 2 seçenek arasında kaldım. Takıldığım kısım şu şekilde:
class Warrior(Character):
"Warrior Class provides extra 10 health."
def __init__(self, *args):
super().__init__(*args)
self.health += 10
class Magister(Character):
"Warrior Class provides extra 10 damage."
def __init__(self, *args):
super().__init__(*args)
setattr(self, "damage", self.damage + 10)
Warrior sınıfında super() ile miras aldığım niteliklerden "health"i bir operatör ile değiştiriyorum.
Magister sınıfında ise bunu setattr ile yapıyorum. Bunlardan hangisi işin doğru biçimde yapılışıdır? İkisi de değilse, doğrusu nedir? Teşekkür ederim.
Kodun Tamamı
#!/usr/bin/bash
class Character(object):
races = {"Human":
{"Health": 100,
"Damage": 25},
"Elven":
{"Health": 75,
"Damage": 35},
"Dwarf":
{"Health": 125,
"Damage": 15}}
armors = ["Silver", "Leather", "Daedric"]
def __init__(self):
""" Sets name, race and armor. """
self.name = input("Please enter character name: ").title()
self.select_race()
self.select_armor()
def select_race(self):
""" Changes damage and health attributes."""
while True:
print("Please select a race: [Human, Elven, Dwarf]")
race = input(">>> ").capitalize()
if race not in Character.races:
print(f"No race such as '{race}'!\n Please try again.")
continue
else:
print(f"Race '{race}' set.")
self.race = race
self.damage = self.races[race]['Damage']
self.health = self.races[race]['Health']
break
def select_armor(self):
""" Ineffective. """
print("Please select an armor: [Silver, Leather, Daedric]")
armor = input(">>> ").capitalize()
while True:
if armor not in Character.armors:
print(f"No race such as '{armor}!\nPlease try again.'")
continue
else:
print(f"Armor '{armor}' set.")
self.armor = armor
break
def display_character(self):
print(f"""Character Name : {self.name}
Character Race : {self.race}
Character Damage: {self.damage}
Character Health: {self.health}
Character Armor : {self.armor}""")
class Warrior(Character):
"Warrior Class provides extra 10 health."
def __init__(self, *args):
super().__init__(*args)
self.health += 10
class Magister(Character):
"Warrior Class provides extra 10 damage."
def __init__(self, *args):
super().__init__(*args)
setattr(self, "damage", self.damage + 10)
user = Magister()
user.display_character()