python - 有没有办法为python中的每个实例创建唯一的字典属性

标签 python class dictionary

使用一个类在字典中创建多个实例,它们的属性不是唯一的。我希望他们每个人都有自己独特的属性。你如何做到这一点?

代码:

class a(object):

    attr_a = {}

    def __init__(self, a={}):

        self.attr_a = a

if __name__ == '__main__':

    b = a()
    c = a()
    b.attr_a['abc'] = 'abc'
    c.attr_a['abc'] = 'def'

    print(b.attr_a)
    print(c.attr_a)

结果:

{'abc': 'def'}
{'abc': 'def'}

想要的结果:

{'abc': 'abc'}
{'abc': 'def'}

最佳答案

这里有两个问题:

1) 对于实例级属性,与类级属性相反,不要在类级声明。因此,请删除类中的 attr_a = {}

2) 默认值 a={} 在类/函数声明时计算,而不是在实例创建/函数调用时计算,因此您很少应该使用可变对象作为默认值。这会导致使用默认 a 值创建的类的所有实例共享相同的 attr_a 字典。您应该使用 a=None 作为默认值,然后在 __init__ 内部实例化它,如下所示:

def __init__(self, a=None):
        self.attr_a = a or {}

关于python - 有没有办法为python中的每个实例创建唯一的字典属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14929098/

相关文章:

java - java中有些私有(private)内部类可以不继承吗?

ios - 从服务器在 map 上请求注释的简单算法

python - 查找字母的所有组合,从字典中的不同键中选择每个字母

python - 将日期时间列拆分为 Pandas 中的日期和时间列

python - 计算 - numpy python 错误

python - 如何将此 json 代码写入 csv 文件?

Python HTTP 服务器无法在 Windows 服务内发送响应

java - 构造函数 Vehicle(String[], int) 未定义

c++ - 类构造函数中的类型转换不正确

python - 从 dict : Python 中删除空格