2

假设我有以下课程

class Daddy:
    children=[]

    def addChild(self,aChild):
        self.children.append(aChild)

class Child:
    name = ''
    def __init__(self, aName):
        self.name = aName

aChild = Child('Peter')
aDaddy = Daddy()
aDaddy.addChild(aChild)
print aDaddy.children[0].name
del(aDaddy)
anotherDaddy = Daddy()
print anotherDaddy.children[0].name

Daddy() 保留对对象 aDaddy 的引用,我得到以下输出:

Peter
Peter
4

1 回答 1

5

children是一个类变量(类似于其他语言中的静态变量),因此它在所有实例之间共享Daddy(与 中的name变量相同Child)。

__init__改为初始化它:

class Daddy:
    def __init__(self):
        self.children = []

    def addChild(self,aChild):
        self.children.append(aChild)
于 2014-06-25T14:57:03.863 回答