• [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()
  • 相关阅读:
    第六章 虹销雨霁(中)
    第四章 曙光初现(下)
    第三章 曙光初现(上)
    第二章 福祸相伴(下)
    第二章 福祸相伴(上)
    小云(云层-陈霁)的发展史
    小白成长建议(9)-苞丁解牛
    NYoj 116士兵杀敌(二)区间求和,单点更新
    HDU 1754 区间查询,单点更新
    《灯亮or灯灭》 --有个有趣的数论问题
  • 原文地址:https://www.cnblogs.com/ljfl-study/p/12391759.html
Copyright © 2020-2023  润新知