我遇到过各种自定义getter
or示例setter
,但是使用自定义时的用例是deleter
什么?到目前为止,我的一个例子是这样的:
def __delattr__(self, attr):
print('Deleting attr %s' % attr)
super().__delattr__(attr)
我遇到过各种自定义getter
or示例setter
,但是使用自定义时的用例是deleter
什么?到目前为止,我的一个例子是这样的:
def __delattr__(self, attr):
print('Deleting attr %s' % attr)
super().__delattr__(attr)
这是一个标准的数据模型钩子,用于自定义语句del obj.attr
将做什么,而不是(或除此之外)从实例中删除属性__dict__
。因此,用户代码可以自由实现他们想要的任何东西!
例如,您可以将其用作“软删除”功能,例如隐藏属性以防止公共访问,而无需实际删除其背后的数据。就个人而言,当相应的 get 属性方法前面有缓存层时,我使用它来使缓存无效。
对于 stdlib 示例,请考虑Mock
该类。默认情况下,模拟实例将为任何属性访问生成子模拟。在特定名称上自动生成的子模拟“选择退出”的公共 API 是通过 custom 实现的__delattr__
。
>>> from unittest.mock import Mock
>>> mock = Mock()
>>> del mock.attr2 # prevent mock.attr2 from working
>>> mock.attr1
<Mock name='mock.attr1' id='4414043216'>
>>> mock.attr2
AttributeError: attr2