如何重写一个突变默认输入的类函数,使之不突变?

问题描述 投票:0回答:1

对于下面的代码,add_item中的库存会被绑定到函数中,就像这里详细介绍的那样。

"最小的惊讶 "和可变异的默认参数

class Person:
    def __init__(self, name: str, inventory: List[Item] = []):
        self.name = name
        self.inventory = inventory

    def add_item(self, item: Item):
        self.inventory.append(item)

所以这就是发生的事情。

Dave.add_item(Book) # has Book
Mary.add_item(Apple) # has Book and Apple

所以我明白现在发生了什么 但我想让玛丽只拥有苹果,但我不知道如何修复它,这样就可以了。

再往下看,我发现做的是 self.inventory = []工作,但这将阻止我在构造函数中初始化物品给人,而我想保留这一点,因为我的add_item方法一次只添加一个东西。

python-3.x object mutable
1个回答
0
投票

这样的东西是未来任何人寻找的答案。感谢@jasonharper在评论中的帮助。

def __init__(self, name: str, inventory: List[Item] = None):         
    if inventory == None: 
        self.inventory = []         
    else: 
        self.inventory = inventory  
© www.soinside.com 2019 - 2024. All rights reserved.