python - 如何将此 getter/setter 代码包装在装饰器中?
问题描述
我正在为二进制文件格式制作解析器,大量代码只是属性获取器/设置器。setter 逻辑有时会发生变化,但它只是验证部分。
以下是它的示例:
class A(Base):
@property
def name(self) -> Optional[str]:
return getattr(self, '_name', None)
@name.setter
def name(self, value: str):
# There might be some validation here, mostly an assert
self.setprop('name', value)
wheresetprop()
是一个继承的方法,它也减少了样板文件
或者
class B(Base):
@property
def index(self) -> Optional[int]:
return getattr(self, '_index', None)
@index.setter
def index(self, value: int):
# There might be some validation here, mostly an assert
self._stream.seek(pos) # pos is different for every property
self._stream.write_uint16(value)
self._index = value
由于格式的工作方式,我不能每次都使用第一种设置方法。我想为这段代码使用装饰器,这样它看起来干净整洁并减少了错误。我想让属性设置器看起来像这样:
@property_setter('index', seek=pos, type=Types.UInt16)
def index(self, value: int):
# Validation, THIS MUST HAPPEN BEFORE property_setter code
pass
解决方案
推荐阅读
- java - Bitbucket 管道找不到 Gradle
- java - i want to set s3 object specific retention
- javascript - 您如何批量删除除固定消息之外的消息?
- javascript - 更新数组内对象的属性
- java - 将 Java 14 记录用于只有最终字段的通用(非数据)类
- python - 如何从python中的csv文件访问或读取特定条目?
- python - Python 嵌套类继承
- reactjs - React-Redux:发布操作失败并出现 500 错误
- c# - 如何从 AWS CDK 和 .NET 核心将值设置为 WAFv2 中的 CfnWebACL.DefaultActionProperty.Allow 属性
- tensorflow - KERAS:CNN 模型的预训练,然后将其用于 CNN-LSTM 模型