使用实现__getattr__的类的Deepcopy调试问题

问题描述

我有一个类,该类的实例变量的类型为enum.Flag。它实现__getattr__以便 我可以返回名称所给标志的布尔状态。

在不进行调试的情况下运行时,代码可以正常工作,并产生预期的输出

Code sample run without debugging. Console output.

但是,当我使用Visual Studio调试器(VS 2019、16.7.4,Python 3.6、64位)运行它时,它总是在__getattr__方法中停止,我需要继续100次直到可以正常继续。我没有设置断点!

VS 2019 Debugger stopping in the __getattr__

我在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)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...