Вызван метод изменения без нового экземпляра класса Python - PullRequest
0 голосов
/ 02 марта 2020

Я новичок в Python OOP и для целей этого вопроса я упростил свою проблему до этого:

class Foo:
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def add(self):
        # some arbitrary change
        return self.a + self.b

    def subtract(self):
        # some arbitrary change
        return self.a - self.b


a = Foo(a=1, b=2).add()
b = Foo(a=1, b=3).subtract()

Итак, у меня есть объект, который имеет 2 метода, которые делают разные вещи, чтобы получить какой-то вывод, я создал 2 отдельных экземпляра Foo, так как значение b изменилось.

Можно ли мне просто динамически установить b и obj.method(), не перечисляя их один за другим? IE: какой-то родовой класс c, который я могу использовать для динамической установки атрибутов и методов, присутствующих в объекте? или есть что-то встроенное, что я могу использовать ...

Редактировать

Вот еще один пример:

class Foo:
    def __init__(self, a, b):
        self.a = list(a)
        self.b = list(b)

    def method1(self):.
        # some arbitrary change in data
        return self.a * 2

    def method2(self):
        return self.b + [5, 6, 4]


a = Foo(a=[1, 2, 3], b=[]).method1()
b = Foo(b=[1, 2, 3], a=[]).method2()

print(a)
print(b)

Итак, список входных данных меняется в зависимости от метода называется, есть ли для меня способ упаковать это, чтобы я мог передать только один экземпляр некоторые данные, а затем он "знает", что список a для method1(), список b для method2() - я хочу использовать слово reflection, но я чувствую, что это может быть неточным.

Опять же, я новичок в OOP, поэтому любые советы приветствуются

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

вам не нужно 2 экземпляра Foo, чтобы достичь этого. Просто сделайте что-то вроде этого:

foo = Foo(a = 1, b = 2)
# Perform addition (now 'a' is 1 and 'b' is 2)
a = foo.add()
# Change 'b'
foo.b = 3
# Now perform subtraction (now 'a' is 1 and 'b' is 3)
b = foo.subtract()
0 голосов
/ 02 марта 2020
class Foo:
    def add(self, a, b):
        return a + b

    def subtract(self, a, b):
        return a - b

fo = Foo()

a = fo.add(1,2)
b = fo.subtract(1,3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...