Как передать переменную в класс, определенный функцией «указатель»? - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь, чтобы атрибут экземпляра класса был «указателем» на функцию. Я не могу понять, как передать параметры в эти функции ..?

from dataclasses import dataclass

def add_two(p1, p2):
    return (p1 + p2)

def multiply_trhee(p1, p2, p3):
    return (p1*p2*p3)

@dataclass
class my_class:
    function: function = None
    return_val: int = None

    def run_function(self):
        self.return_val = self.function(**kwargs) #???

a = my_class(add_two)
b = my_class(multiply_trhee)

a.run_function(p1= 1, p2 = 2)
b.run_function(p1 = 1, p2 = 2, p3 = 3)

print(a.return_val) #should print 3
print(b.return_val) #should print 6

1 Ответ

0 голосов
/ 23 апреля 2020

Вы можете принять произвольные параметры для run_function и распространить их следующим образом:

def run_function(self, **kwargs):
    self.return_val = self.function(**kwargs)

Но вам, вероятно, следует сделать более структурированное определение класса:

class my_class:

    def __init__(self, func):
        self.function = func

    def run_function(self, **kwargs):
        self.return_val = self.function(**kwargs)

Кроме того, оно предпочтительно напрямую возвращать значение из функций.

Полный код:

from dataclasses import dataclass

def add_two(p1, p2):
    return (p1 + p2)

def multiply_trhee(p1, p2, p3):
    return (p1*p2*p3)

@dataclass
class my_class:

    def __init__(self, func):
        self.function = func

    def run_function(self, **kwargs):
        return self.function(**kwargs)

a = my_class(add_two)
b = my_class(multiply_trhee)

print(a.run_function(p1= 1, p2 = 2))
print(b.run_function(p1 = 1, p2 = 2, p3 = 3))
...