Если ваш класс может предоставить набор возможных имен, вы можете создать объект, из которого каждый вызов Person.__init__
получает другое имя. Например:
from itertools import cycle
class Person:
names = cycle(["Alice", "Bob", "Carol", "Dan"])
def __init__(self):
self.name = next(Person.names)
Добавьте столько имен в пул, сколько необходимо.
Имена обязательно повторятся, когда начальный набор имен будет исчерпан, и цикл начнется снова. Приложив немного больше работы, мы можем по крайней мере изменить порядок, в котором имена создаются в каждом цикле:
from itertools import cycle
import random
class Person:
def shuffled_cycle(names):
while True:
random.shuffle(names)
yield from names
names = shuffled_cycle(["Alice", "Bob", "Carol", "Dan"])
def __init__(self):
self.name = next(Person.names)
Конечно, если повторяющиеся имена не являются проблемой, просто вызовите random.choice
изнутри __init__
. Это гораздо проще:
import random
class Person:
def __init__(self):
self.name = random.choice(["Alice", "Bob", "Carol", "Dan"])
В крайнем случае, просто генерировать случайные имена из изначального супа букв:
import random
import string
class Person:
def __init__(self):
k = random.randint(3, 10)
self.name = ''.join(random.sample(string.ascii_lowercase, k)).title()