gpt4 book ai didi

python - 在 Python 中将对象标记为已删除

转载 作者:太空宇宙 更新时间:2023-11-04 02:24:26 25 4
gpt4 key购买 nike

我的 Python 应用程序中有一组用户创建的对象。

如果用户删除了这些对象之一,仅出于错误检查的目的,我想将其标记为已删除,以便将来使用该对象的任何尝试都会导致错误。

我考虑了一些选择:

  • del:这会删除引用并保留任何悬空引用。
  • __dict__.clear() 这会在访问对象时给出一个令人困惑的 AttributeError,并删除所有可能有助于跟踪对象的信息

我也考虑过覆盖 __getattribute__ 但是,更改它似乎是无效的。

class MyClass:
def __init__( self ):
self.a = 1
self.b = 2
self.c = 3

m = MyClass()

print( m.a )
print( m.b )
print( m.c )


def fn_deleted( self, attribute ):
raise ValueError( "This object should have been deleted :(" )


m.__getattribute__ = fn_deleted

print( m.a ) # <-- NO ERROR

我觉得应该有一种简单的方法来检查悬挂引用。有什么想法吗?

最佳答案

class MyClass(object):
def __init__( self ):
self.a = 1
self.b = 2
self.c = 3
self.__deleted__ = dict()

def __delattr__(self, item):
value = self.__getattribute__(item)
self.__deleted__[item] = value
# optional actually delete attribute..
super().__delattr__(item)

def __getattribute__(self, item):
if item == '__deleted__':
return super().__getattribute__(item)
elif item in self.__deleted__:
print('item has been deleted, prev value: {}'.format(self.__deleted__[item]))
else:
return super().__getattribute__(item)

m = MyClass()
print( m.a )
del m.a
print( m.a )

---------------------------
1
item has been deleted, prev value: 1
None

关于python - 在 Python 中将对象标记为已删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50802649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com