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

Python 创建新对象时如何设置attirbutes列表,python,list,class,oop,object,Python,List,Class,Oop,Object,希望标题不要太混乱。我一直在开发这个程序,我已经创建了一个带有默认列表的so attribute。问题是,当我创建这个对象时,我不知道如何修改这个列表。多谢各位 def\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 自身名称=纳米 自维护=pm 自身地址=美国存托股 自我奖励=[0,0,0,0]``` employer1=Employe(“nom”、“prenom”、“adrese”、[025

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

def\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
自身名称=纳米
自维护=pm
自身地址=美国存托股
自我奖励=[0,0,0,0]```
employer1=Employe(“nom”、“prenom”、“adrese”、[0250,50,10]#例如,我想设置
#但是我不确定我是否可以这样做,或者我是否需要为它创建一个新函数。

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

def __init__(self,nm,pm,adss,bns):
    self._nom =  nm
    self._prenom = pm
    self._adresse = adss
    self._bonus = bns
然后初始化器知道它应该期望第四个参数应用于
\u bonus
属性

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

根据您的问题,我不确定您是否希望奖金的默认设置作为标准。如果是这样,请参阅问题上的注释以了解有关如何操作的详细信息。

您可以为
奖金
参数指定一个不可变的默认值,然后根据是否传递了值分配给
自我。\u奖金

制作作为参数传递给对象的可变参数的副本通常是一种好的做法

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
这回答了问题的原因:

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

您能否始终将
奖金作为一个参数传递?如果是这样,您可以将其视为所有其他参数。如果您希望在
[0,0,0]
上有一个默认值,在某些情况下您可以覆盖该值,您也可以这样做,但它有一个常见的问题-请参阅预定义的
奖金作为
定义\u init__(self、nm、pm、adss、bonus=[0,0,0,0]):
并将
self.\u bonus=[0,0,0]
更改为
self.\u bonus=bonus
@sahasrara62:坏主意。这是一个可变的默认参数错误。正如@user2357112supportsMonica所说的,在参数定义中添加
None
,如果希望将默认值保留为[0,0,0,0]然后使用if语句
,仅预定义的
bonus`as
def\u init\u(self、nm、pm、adss、bonus=None):
并将
self.\u bonus=[0,0,0]
更改为
self.\u bonus=bonus if bonus else[0,0,0]
我只是想知道,当我将对象列表添加到该类中时,是否可以为其设置新值。但似乎我需要创建一个集合。谢谢!
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]