как манипулировать значением различных атрибутов экземпляра одним и тем же методом - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть класс, который с помощью разных методов создает значения для 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

Я ценю любые ввод!

...