Python 类中成员的坑

先看一下下面代码:

class demo:
    l = []

o1 = demo()
o1.l.append ("Hello")

o2 = demo()
o2.l.append ("World!")

print("list in o1: ", o1.l)

print("list in o2: ", o2.l)

你以为它会打印出什么?

我们来看看实际情况:

很显然,这不是我们想要的结果,那么如何解决呢?

问题的原因

我们把这两个对象的中 L 的id打印出来看看:

看到没, 简直完全特么一模一样, 这是因为我们在定义L的时候, 把这个L定义到了这个类所有成员的公共池中,具体我也不知道怎么表达, 但是你能理解就好。

解决方法:

很简单, 只需要在实例化的时候分配一个新的对象给L就好了:

class demo:
    l:list

    def __init__(self) -> None:
        self.l = []

Leave a Reply