python - 自定义删除器方法示例
问题描述
我遇到过各种自定义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
推荐阅读
- python - Python 请求返回 502 网关错误
- questdb - 如何在不丢失容器数据的情况下更新 QuestDB docker 版本?
- php - 为什么论点太少?我错过了什么?
- django - 如何将新网页上传到 django 应用程序?
- reactjs - React Redux Typescript - 如何设置类型?
- r - 如何从 R 中的时间提取价格并汇总每分钟的值?
- javascript - 数据表编辑器 yajra,创建按钮不起作用
- azure - Cosmos DB 分页提供成倍的页面记录
- javascript - 如何删除有重复的数组元素?
- sql - 从 Oracle DB 中的完整表数据中计算特定匹配