[bug]类内一定重视初始化函数 ADN global

这是个非常简单又重要又极其容易忽视的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()
原文地址:https://www.cnblogs.com/ljfl-study/p/12391759.html