Python中的类变量[set()]
为什么set的行为不同于python中类变量的字典。比如说,Python中的类变量[set()],python,Python,为什么set的行为不同于python中类变量的字典。比如说, class Test1: x=set() y={} hamster=Test1() chinchilla=Test1() hamster.x.add('hi') # now both sets in both instances have 'hi' hamster.y['key']=5 # only the hamster instance will contain 5 谢谢你的帮助:) 编辑:我还注意到,如果在
class Test1:
x=set()
y={}
hamster=Test1()
chinchilla=Test1()
hamster.x.add('hi') # now both sets in both instances have 'hi'
hamster.y['key']=5 # only the hamster instance will contain 5
谢谢你的帮助:)
编辑:我还注意到,如果在init()中定义self.x=set(),可以避免添加到两个实例的问题删除打字错误不,您错了,两人都有
键:5
:
In [56]: class Test1:
....: x=set()
....: y={}
....:
In [57]: hamster=Test1()
In [58]: chinchilla=Test1()
In [59]: hamster.x.add('hi') # now both sets in both instances have 'hi'
In [60]: hamster.y['key']=5
In [62]: hamster.x,chinchilla.x
Out[62]: (set(['hi']), set(['hi']))
In [63]: hamster.y,chinchilla.y
Out[63]: ({'key': 5}, {'key': 5})
实际上,在代码中,您并没有更改实例变量,而是更改了类变量:
In [65]: Test1.x
Out[65]: set(['hi'])
In [66]: Test1.y
Out[66]: {'key': 5}
您需要在此处使用实例变量:
In [71]: class Test1():
def __init__(self):
self.x=set()
self.y={}
....:
....:
In [75]: hamster=Test1()
In [76]: chinchilla=Test1()
In [77]: hamster.x.add('hi')
In [78]: chinchilla.x.add('bye')
In [79]: hamster.x
Out[79]: set(['hi'])
In [81]: chinchilla.x
Out[81]: set(['bye'])
In [82]: hamster.y['key']=5
In [83]: hamster.y,chinchilla.y
Out[83]: ({'key': 5}, {})
不,你错了,两人都有
键:5
:
In [56]: class Test1:
....: x=set()
....: y={}
....:
In [57]: hamster=Test1()
In [58]: chinchilla=Test1()
In [59]: hamster.x.add('hi') # now both sets in both instances have 'hi'
In [60]: hamster.y['key']=5
In [62]: hamster.x,chinchilla.x
Out[62]: (set(['hi']), set(['hi']))
In [63]: hamster.y,chinchilla.y
Out[63]: ({'key': 5}, {'key': 5})
实际上,在代码中,您并没有更改实例变量,而是更改了类变量:
In [65]: Test1.x
Out[65]: set(['hi'])
In [66]: Test1.y
Out[66]: {'key': 5}
您需要在此处使用实例变量:
In [71]: class Test1():
def __init__(self):
self.x=set()
self.y={}
....:
....:
In [75]: hamster=Test1()
In [76]: chinchilla=Test1()
In [77]: hamster.x.add('hi')
In [78]: chinchilla.x.add('bye')
In [79]: hamster.x
Out[79]: set(['hi'])
In [81]: chinchilla.x
Out[81]: set(['bye'])
In [82]: hamster.y['key']=5
In [83]: hamster.y,chinchilla.y
Out[83]: ({'key': 5}, {})
哪里定义了
Test1.add
?这是您的全部代码吗?这应该如何工作?Test1.add在哪里定义?这是您的全部代码吗?这怎么行?