Как установить список атрибутов при создании нового объекта - PullRequest
0 голосов
/ 27 мая 2020

Надеюсь, название не слишком запутало. Я работал над программой и создал ее со списком по умолчанию. Дело в том, что я не знаю, как внести изменения в этот список при создании этого объекта. Спасибо

    def __init__(self,nm,pm,adss):
        self._nom =  nm
        self._prenom = pm
        self._adresse = adss
        self._bonus = [0,0,0,0]```

employer1 = Employe("nom","prenom","adresse",[0,250,50,10] #For exemple I wanted to set 
#the list for that one. But im not sure if I can do it like that or if I might need to create a new function for it.

Ответы [ 3 ]

0 голосов
/ 27 мая 2020

Вы можете присвоить неизменяемое значение по умолчанию аргументу bonus, а затем присвоить self._bonus в зависимости от того, было ли передано значение.

Обычно это хорошая практика чтобы сделать копию изменяемых параметров, переданных в качестве аргумента объекту.

def __init__(self, nom, prenom, adresse, bonus=None):
    self._nom =  nom
    self._prenom = prenom
    self._adresse = adresse
    self._bonus = [] if bonus is None else bonus[:]  # make a copy of the mutable parameter
0 голосов
/ 27 мая 2020
def __init__(self, nom, prenom, adresse, bonus=None):
    self._nom =  nom
    self._prenom = prenom
    self._adresse = adresse
    self._bonus = bonus if bonus else [0, 0, 0, 0]

Причины, по которым это отвечает на вопрос:

  • Вы не хотите, чтобы список был буквальным (один из следующих: []) по умолчанию параметр для вызова функции / метода. Это ошибка неизменяемого значения по умолчанию, о которой все говорят.
  • Установка для параметра bonus значения по умолчанию None с последующим выполнением проверки, было ли передано другое значение, - вот способ на go.
  • Самый простой способ проверить значение параметра bonus показан выше.
0 голосов
/ 27 мая 2020

Текущая версия не будет работать, поскольку вы не передаете этот список в качестве параметра функции инициализации. Ваша функция __init__ должна выглядеть так:

def __init__(self,nm,pm,adss,bns):
    self._nom =  nm
    self._prenom = pm
    self._adresse = adss
    self._bonus = bns

Тогда инициализатор знает, что он должен ожидать, что четвертый параметр будет применяться к атрибуту _bonus.

Обратите внимание, что это установит атрибут только при создании объекта. Чтобы изменить его после создания объекта, вы должны создать функцию установки.

Я не уверен в вашем вопросе, хотите ли вы стандартную установку бонуса по умолчанию. Если да, см. Комментарии к вашему вопросу, чтобы узнать, как это сделать.

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