我一周前开始用python进行编码,这是我的错误,我很快就开始使用oops,类和对象进行编码。我以为我的C ++水平会有所帮助…。
class A: var=0 list=[] def __init__(self): pass
令我惊讶的是,var和list都是一个全局变量,似乎在所有实例中都共享....我以为在所有实例中它都不同.....我花了半天的时间才弄清楚那....一点意义都没有,一个变量只能由一个类对象访问,而是在所有实例之间共享....只是好奇,它背后有原因吗??? ??
var只要您通过instance.var或访问,绝对不应共享self.var。但是,对于列表,您的语句要做的是在评估该类时,将创建一个列表实例并将其绑定到该类dict,因此所有实例将具有相同的列表。每当您设置instance.list = somethingelse响应时。self.list = somethingelse,它应该获得实例级别的值。
var
instance.var
self.var
instance.list = somethingelse
self.list = somethingelse
时间示例:
>>> class A(): ... var = 0 ... list = [] ... >>> a = A() >>> b = A() >>> a.var 0 >>> a.list [] >>> b.var 0 >>> b.list [] >>> a.var = 1 >>> b.var 0 >>> a.list.append('hello') >>> b.list ['hello'] >>> b.list = ['newlist'] >>> a.list ['hello'] >>> b.list ['newlist']