问题背景:
在使用的python的过程中,想实现这样的场景:有一个静态类存放着一个静态属性(即类属性),我想将其用来存储状态。在其他python文件可能会多次进行修改,我每次获取这个属性,我就能知道当前的状态。由于之前写过java,所以按着java的思路来,我写了以下两个文件:
# 这是car.py文件
# -*- coding:UTF-8 -*-
class Car(object):
flag = False
@classmethod
def setFlag(cls, flag):
cls.flag = flag
@classmethod
def getFlag(cls):
return cls.flag
if __name__ == "__main__":
Car.setFlag(True)
print(Car.getFlag())
lib.initial.initial(False)
print(Car.getFlag())
# 这是initial.py文件
# -*- coding:UTF-8 -*-
import lib.car
def initial(flag):
lib.car.Car.setFlag(flag)
运行car.py文件
预期结果:
True
False
实际结果:
True
True
原因:
怀疑可能是在initial.py文件中时,lib.car.Car这个类和在car.py里的Car类是不一样的两个了,在initial.py里边对类属性的设置并不会同步到car.py里的Car类。所以出现了这个问题。具体原理没有弄清楚,各位有了解的请在评论里告知!
解决方案:
虽然出现了这种情况,但是这种使用场景还是需要实现的。发现不在car.py里运行的话,输出的结果就符合预期。
总结:
所以目前的总结就是,不要在主程序(即__name__ == “main”)下定义静态类和类属性。