Как создать экземпляр класса с непостоянными параметрами?

Есть класс:

class Enemy():
""" Противники """
def __init__(self, name, lvl):
    """ Описание свойств монстра """
    self.name = name
    self.lvl = lvl

def printEnemyParam(self):
    print ("Монстр " + str(self.name) + " напал на тебя, у него " + str(self.lvl) + " уровень")

def printEnemyHp(self):
    print("У " + str(self.name) + " осталось " + str(self.hp) + " жизней")

def enemyChar(self):
    self.name = rand.choice(enemyName)
    self.lvl = rand.randint(1, 3)

Есть кортеж с именами:

enemyName = ("Злая бабка", "Трудовик", "Сосед Валера", "Социальный педагог", "Гопник Олег")

Я пытаюсь создать экземпляр этого класса, но не могу понять как из метода enemyChar() вытащить и поместить в экземпляр готовые результаты random'а

Enemy1 = Enemy(enemyChar() тут имя, enemyChar() а тут лвл)

И никак не могу понять как это можно сделать?


Ответы (1 шт):

Автор решения: Алексей Р

Нужно все-таки определиться - вы передаете в конструктор класса наименование и уровень монстра или же они генерятся рандомно при создании объекта. Если они должны генериться, то можно так - вызываете метод enemyChar() из инита. Тогда передавать аргументы в конструктор бессмысленно.

class Enemy():
    """ Противники """
    enemyName = ("Злая бабка", "Трудовик", "Сосед Валера", "Социальный педагог", "Гопник Олег")

    def __init__(self):
        """ Описание свойств монстра """
        super().__init__()
        self.enemyChar()

    def printEnemyParam(self):
        print("Монстр " + str(self.name) + " напал на тебя, у него " + str(self.lvl) + " уровень")

    def printEnemyHp(self):
        print("У " + str(self.name) + " осталось " + str(self.hp) + " жизней")

    def enemyChar(self):
        self.name = rand.choice(self.enemyName)
        self.lvl = rand.randint(1, 3)
        self.hp = 5


Enemy1 = Enemy()
Enemy1.printEnemyParam()
Enemy1.printEnemyHp()
Монстр Злая бабка напал на тебя, у него 3 уровень
У Злая бабка осталось 5 жизней

И поскольку enemyChar() вызывается однократно только при создании объекта, можно все это реализовать в __init__()

→ Ссылка