我有一个类,它有一个 enum.Flag 类型的实例变量。它的实现__getattr__
使我可以返回由名称给出的标志的布尔状态。
该代码在没有调试的情况下运行良好,产生预期的输出。
但是,当我使用 Visual Studio 调试器(VS 2019、16.7.4、Python 3.6、64 位)运行它时,它总是在__getattr__
方法中停止,我需要继续 100 次,直到我可以正常继续。我没有设置断点!
我在 IDLE 中测试了相同的代码。IDLE在调试期间不会停止在getattr中!
我怎样才能摆脱那些烦人的误报干扰我的调试会话?
from enum import Flag, auto
from copy import deepcopy
class MyFlags(Flag):
FOO = auto()
BAR = auto()
BAZ = auto()
class Features:
__slots__ = ('_features', )
def __init__(self, bitmask):
self._features = bitmask
@property
def bitmask(self):
return self._features
def __getattr__(self, attr):
try:
return bool(MyFlags[attr].value & self._features)
except:
raise AttributeError(attr)
f = Features(5)
print(f.bitmask)
print(f.FOO)
print(f.BAR)
print(f.BAZ)
f = Features(3)
print(f.bitmask)
print(f.FOO)
print(f.BAR)
print(f.BAZ)
g = deepcopy(f)
print(f.bitmask)
print(f.FOO)
print(f.BAR)
print(f.BAZ)