是否可以将setter作为方法来调用?

问题描述

鉴于以下课程,我可以使用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)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...