Должен ли я использовать класс? (Python) - PullRequest
3 голосов
/ 31 января 2012

Я пытаюсь написать небольшой модуль Python, который содержит некоторые математические функции.Например, она может содержать такую ​​функцию:

def quad(x, a, b, c):
    return a*x**2 + b*x + c

Как вы можете заметить, она содержит несколько параметров (а именно a, b, c), кроме переменной x.Теперь, если бы я поместил это в файл и просто импортировал, конечный пользователь должен был бы всегда вызывать функцию с параметрами в дополнение к переменной.Из-за этого я думал о создании класса, такого как:

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

    def eq(x):                               
        return self.a*x**2 + self.b*x + self.c 

Таким образом, позволяя конечному пользователю использовать его как:

q = quad(p, q, r) 
eq = q.eq      

Это правильный способ ведения дел?Я ужасно сожалею о названии вопроса, так как не мог придумать лучшего!

Ответы [ 2 ]

7 голосов
/ 31 января 2012

Это похоже на вполне разумное использование класса. По сути, вы должны рассмотреть возможность использования класса, когда ваша программа включает в себя вещи, которые можно моделировать как объекты с состоянием. Здесь «состояние» вашего полинома - это просто коэффициенты a, b и c.

Вы также можете использовать специальный метод Python __call__, чтобы позволить обрабатывать класс, как если бы он был самой функцией:

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

    def __call__(x):
        return self.a * x**2 + self.b * x + self.c

q = quad(p, q, r)
q(x)

Еще один способ сделать это, который мог бы быть немного чище, - просто вернуть функцию с этими коэффициентами. По сути, это пример карри, как упоминает Тиходрама:

def quad(a, b, c):
    def __quad(x):
        return a * x**2 + b * x + c

    return __quad

Или используя синтаксис lambda:

def quad(a, b, c):
    return lambda x: a * x**2 + b * x + c

Затем их можно использовать так:

q = quad(p, q, r)
q(x)
5 голосов
/ 31 января 2012

Похоже, вы ищете что-то вроде карри .

Возможно этот вопрос может вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...