Для того, что вы описали, вам на самом деле не нужно подклассов, вы можете просто иметь разные экземпляры класса Enemy
. Если вы решили использовать несколько классов, вы можете запечь атрибуты в методе __init__
. Вот оба варианта ...
Инстанциация
class Enemy:
def __init__(self, hp, attack, speed, accuracy):
self.hp = hp
self.attack = attack
self.speed = speed
self.accuracy = accuracy
Warrior = Enemy(100, 5, 7, 6)
Dragon = Enemy(500, 8, 2, 4)
Подклассы
class Enemy:
def __init__(self, hp, attack, speed, accuracy):
self.hp = hp
self.attack = attack
self.speed = speed
self.accuracy = accuracy
class Warrior(Enemy):
def __init__(self):
super().__init__(100, 5, 7, 6)
class Dragon(Enemy):
def __init__(self):
super().__init__(500, 8, 2, 4)
Надеюсь, это ответит на ваш вопрос. Я бы делал первый метод, пока мне действительно не нужно больше функций, специфичных для каждого класса. С самого начала я не уверен, что еще Dragon
сможет сделать более конкретно, чем Enemy
. Прокомментируйте ниже, если вы запутались.
Редактировать : Просто подумайте о третьей вещи, которую вы могли бы сделать как модификацию метода создания экземпляров.
Проблема с методом создания экземпляров состоит в том, что если вы хотите использовать несколько типов одного типа, вам придется продолжать повторное выделение их с их атрибутами «Враг». Но вы можете избежать этого, используя метод __call__
.
class Enemy:
def __init__(self, hp, attack, speed, accuracy):
self.hp = hp
self.attack = attack
self.speed = speed
self.accuracy = accuracy
def __call__(self):
return Enemy(self.hp, self.attack, self.speed, self.accuracy)
Warrior = Enemy(100, 5, 7, 6)
Dragon = Enemy(500, 8, 2, 4)
И затем вы можете создавать новые экземпляры Warrior
или Dragon
без использования Enemy(...)
:
warrior1 = Warrior()
warrior2 = Warrior()
dragon1 = Dragon()
assert warrior1 is not warrior2
assert dragon1 is not Dragon
assert isinstance(dragon1, Enemy)