Python инициализация переменных с данными по умолчанию для нескольких объектов - PullRequest
0 голосов
/ 21 марта 2020

Я хочу инициализировать переменные со значениями по умолчанию в конструкторе без параметров, например:

class Persons()
   def __init__(self):
      self.name="Joan"

p1=Persons()
print(p1.name)

Таким образом, результатом для этого будет «Джоан». Он напечатает имя человека. Все хорошо. Но как мне сделать это для нескольких объектов? Я хочу напечатать p2.name, p3.name с разными именами, как и выше.

Я получил это из упражнения, в котором меня просят «создать конструктор без параметров, который инициализирует переменные с данными по умолчанию».

Ответы [ 3 ]

0 голосов
/ 21 марта 2020

Если ваш класс может предоставить набор возможных имен, вы можете создать объект, из которого каждый вызов 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()
0 голосов
/ 21 марта 2020

Итак, дело в том, что вы хотите инициализировать со значениями по умолчанию. Код, который вы написали, правильный. Каждый новый экземпляр класса «Person» будет инициализироваться с тем же значением по умолчанию, что является хорошей практикой кодирования. Так как это значение «по умолчанию» таким же. Однако ради знаний я написал небольшую программу, которая может дать новые имена 5 новым экземплярам класса Person, однако не использую это в производстве, поскольку это плохая практика, но хорошая для обучения.

class Person :
    #class Variable
    name_list=["Jhon","Naruto","James","Smith","Neo"]
    instance_count = 0

    def __init__(self):
        #Resets instance count when instances become greater that 5
        instance_count = instance_count%5  

        #Sets new name
        self.name = name_list[instance_count]

        #increment instance_count
        instance_count = instance_count + 1
0 голосов
/ 21 марта 2020

Просто добавьте имя в качестве параметра:

class Persons()
   def __init__(self, name):
      self.name = name
p1=Persons(“Joan”)
print(p1.name)

Или

p1.name = “Jim”
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...