python - Python:使用带有参数的方法作为属性
问题描述
我正在尝试从单个 getter/setter-method 对创建一些类属性,它们都采用可选参数。我已经让它工作了,但是代码看起来相当丑陋且不可读,所以我想知道是否有更好的方法来做到这一点。
这是我目前拥有的:
class Test:
def __init__(self, *x):
self._x = list(x)
def get_val(self, i=0):
return self._x[i]
def set_val(self, val, i=0):
self._x[i] = val
first = property(get_val, set_val)
second = property(lambda t: t.get_val(1), lambda t, val: t.set_val(val, 1))
third = property(lambda t: t.get_val(2), lambda t, val: t.set_val(val, 2))
t = Test('one', True, 3.14, 34)
t.get_val() #'one'
t.first #'one'
t.first = 8
t.first #8
t.get_val(1) #True
t.second #True
t.second = [41]
t.second #[41]
t.get_val(2) #3.14
t.third #3.14
有没有办法让property
函数调用(second = ...
和third = ...
)更具可读性?或者有没有更好的方法一起做这件事?
PS - 这是一个人为的例子。实际上,get_val
并且set_val
更复杂,我不想重复他们的代码。
解决方案
推荐阅读
- jquery - 单击添加新行按钮第一行单选按钮值在 jquery 中未定义
- docker - 如何更改 Spring Cloud Stream Kafka binder 的目标?
- c# - 将此日期格式“2019-11-07T13:30:00+05:30”转换为UTC日期的最佳方法是什么?
- reactjs - ReactJS:如何在下拉菜单中执行多项选择?
- php - Laravel 最大验证对文件上传不起作用,我仍然可以上传大于限制的图像。为什么会这样?
- remote-server - 如何调试 rsyslog 到远程服务器的问题?
- amazon-web-services - 从 AWS DataLake 到 RDS 的 ETL
- angular - 刷新在 Angular 6 中加载的页面后,在路由上不加载外部 js
- python - pytorch和tensorflow中GRUCell函数的区别
- xcode - ld:警告:找不到选项“-F~/Documents/FacebookSDK”的目录-react-native-ios