这是个非常简单又重要又极其容易忽视的bug!!!
python定义一个类时,一定要在__init__里面把所有的参数给初始化!!!
我今天写代码时没这么做。结果发现,一个类A,他里面有集合参数s = {1,2,3}。然后定义一个对象A a1,向a1里的s增加个元素,s变为{1,2,3,4},这时在定义一个对象A a2,发现此时a2里的s为{1,2,3,4,}!!!!
代码如下:
class A: s = {1,2,3} a1= A() print(a1.s) a1.s.add(4) a2= A() print(a2.s)
这也太诡异了!最关键的是只有集合参数是这样的,整型参数、字符串参数等等并不这样。
也许你会认为,对象之间共享集合参数,可是,当你定义完a1、a2之后,改变a1的集合,a2的集合并不随之改变!也就是说,这种诡异的情况只发生在“改变a1的值是发生在定义a2之前”这个情况下。太诡异了!
解决方法:在__init__里面把所有的参数给初始化!!!在__init__里面把所有的参数给初始化!!!在__init__里面把所有的参数给初始化!!!
原因好理解就不说了。
害我找这个bug找了将近两个小时,枯了。
新bug:
在python中的函数里,如果确定要引用并修改全局变量必须加上global关键字(主函数除外)
例子:
a = 6 def abc(): global a print (a) a=a+1 abc()