Python 3 - 附加到私有EMPTY列表

时间:2014-01-08 14:10:47

标签: python list instance python-3.3

为什么私有类变量中的这个结构会将他的数据附加到前一个实例?

class garden:
    __flower = []

    def __init__(self, flower):
        self.__flower.append(flower)

    def __str__(self):
        return str(self.__flower)


g1 = garden([1,2,3,4])
print(g1)
g2 = garden([5,6,7,8])
print(g1)

输出:

[[1, 2, 3, 4]]
[[1, 2, 3, 4], [5, 6, 7, 8]]

与“字符串行为”相比,看起来真的与我不同 - 为什么:

class garden:
    __flower = ""

    def __init__(self, flower):
        self.__flower = flower

    def __str__(self):
        return str(self.__flower)


g1 = garden("dsf")
print(g1)

g2 = garden("asdf")
print(g2)
print(g1)enter code here

输出:

dsf
asdf
dsf

感谢您的回答

1 个答案:

答案 0 :(得分:4)

因为在class外部任何def中声明的变量是类属性,由该类的所有实例共享。

class Garden(object):

    class_flower_attribute = []

    def __init__(self, flower):
        self.instance_flower_attribute = [flower]