python - 如何使用相同的方法操作不同实例属性的值
问题描述
我有一个类,它通过不同的方法为 2 个不同的属性创建值。然后,如果需要,我想通过另一个实例方法来操作这些属性值。
class Test:
def __init__(self):
self.a = self.b = None
pass
def make_a(self, a):
// put 'a' through some process
self.a = a
return self
def make_b(self, b):
// put 'b' through some process
self.b = b
return self
def change_attr(self):
// some change
我希望能够根据需要调用change_attr
或make_a
更改make_b
其中之一a
或的值b
。像Test().make_a(3).change_attr()
......然后a
在事后访问实例。
但我不知道如何设置change_attr
或一般的类,以便它“知道”在它之前调用了什么实例方法。
要调用change_attr
其他方法,我让这些方法返回 self,但change_attr
不知道要更改什么属性。
装饰器感觉很合适,但它需要打开和关闭,我只看到过这个作为类方法的例子(比如这里)。一旦我开始尝试传递self
这个想法就会崩溃。
我想知道装饰器是否是正确的方法。或者,如果我可以以某种方式调用实例属性上的实例方法(可能存在疑问)......
test = Test()
test.make_a(5)
test.a.change_attr()
或者如果change_attr
可以以某种方式告诉之前调用了什么方法(也可能存在疑问)。
现在我有一个有点笨拙的方法,其中传递一个参数change_attr
告诉方法要更改哪个属性。
def change_attr(self, attr_to_change):
if attr_to_change == 'a':
// make change to a
elif attr_to_change == 'b':
// make change to b
我很感激任何意见!
解决方案
推荐阅读
- javascript - 在折线图 D3 中获得流畅的动画
- nuxt.js - 页面重新加载时如何运行客户端功能?
- javascript - 更新 x 轴 d3js
- informatica - Informatica PowerCenter Workflow - Windows 计算机上工作流会话中的平面文件路径
- prometheus - 如何在 Prometheus Grafana 中计算正常运行时间百分比或停机时间百分比
- flutter - 无法在颤动中向自定义底部导航添加操作
- javascript - Javascript 删除按钮
- javascript - 试图了解全局 javascript 变量的范围
- laravel - Laravel:投射一个数组并推送到它?
- r - 如何规范化 R 数据框中的所有变量(除了一个变量是一个因素)