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)