首页 > 解决方案 > 如何使用相同的方法操作不同实例属性的值

问题描述

我有一个类,它通过不同的方法为 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_attrmake_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

我很感激任何意见!

标签: pythonclassooppython-decorators

解决方案


推荐阅读