创建新对象时如何设置attirbutes列表

2024-05-17 12:13:48 发布

您现在位置:Python中文网/ 问答频道 /正文

希望标题不要太混乱。我一直在开发这个程序,我已经创建了一个带有默认列表的so attribute。问题是,当我创建这个对象时,我不知道如何修改这个列表。多谢各位

    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.


Tags: toself程序标题列表forifthat
3条回答

您可以为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
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]

这回答了问题的原因:

  • 您不希望将列表文字(其中之一:[])作为函数/方法调用的默认参数。这就是大家谈论的不可变默认值bug
  • bonus参数的默认值设置为None,然后执行检查以查看是否传递了不同的值是一种方法
  • 上面显示了检查bonus参数值的最干净的方法

当前版本不起作用,因为您没有将该列表作为参数传递给初始化函数。您的__init__函数需要如下所示:

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

然后初始化器知道它应该期望第四个参数应用于_bonus属性

请注意,这将仅在创建对象时设置属性。要更改对象创建后,应创建setter函数

从你的问题来看,我不确定你是否想要一个默认的奖金标准。如果是这样的话,请参阅对您的问题的评论,以了解有关如何做到这一点的详细信息

相关问题 更多 >