问题描述
鉴于以下课程,我可以使用setter / getter构造修改_x
。但是现在可以通过调用方法来更改_x
吗?
我要问的原因仅仅是因为稍后使用lambda y: (c.x := y)
将其定义为lambda会很方便,它在3.8中可用,但是在3.7中我们需要类似lambda y: c.x.some_method_maybe(y)
的东西。
class C:
def __init__(self):
self._x = 0
@property
def x(self):
return self._x
@x.setter
def x(self,_x):
print(_x)
self._x = _x
c = C()
c.x = 999 # this works
c.x.some_method_maybe(999) # call setter of x explicitly?
解决方法
不要使用lambda,只需使用一个函数即可:
def modify(y): c.x = y
或者如果您讨厌可读性:
type(c).x.__set__(c,5)