首页 > 解决方案 > 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更复杂,我不想重复他们的代码。

标签: pythonproperties

解决方案


推荐阅读