Подтвердить что ты не робот

Есть ли преимущество в использовании класса Python?

У меня есть класс Python, полный статических методов. Каковы преимущества и недостатки их упаковки в классе, а не в сырых функциях?

4b9b3361

Ответ 1

Нет. Это то, что модули предназначены для: группировки связанных функций. Использование класса, полного статических методов, заставляет меня съеживаться с Javaitis. Единственный раз, когда я использовал статическую функцию, - это функция, являющаяся неотъемлемой частью класса. (На самом деле, я бы, вероятно, вообще хотел бы использовать метод класса.)

Ответ 2

Нет. Было бы лучше сделать их функциями, и если они связаны, поместите их в свой собственный модуль. Например, если у вас есть такой класс:

class Something(object):

    @staticmethod
    def foo(x):
        return x + 5

    @staticmethod
    def bar(x, y):
        return y + 5 * x

Тогда было бы лучше иметь такой модуль, как

# something.py

def foo(x):
    return x + 5

def bar(x, y):
    return y + 5 * x

Таким образом, вы используете их следующим образом:

import something
print something.foo(10)
print something.bar(12, 14)

Не бойтесь пространств имен. ;-)

Ответ 3

Если ваши функции зависят друг от друга или глобального состояния, рассмотрите также третий подход:

class Something(object):
    def foo(self, x):
        return x + 5

    def bar(self, x, y):
        return y + 5 * self.foo(x)

something = Something()

Используя это решение, вы можете протестировать функцию изолированно, потому что вы можете переопределить поведение другой функции или ввести зависимости с помощью конструктора.

Ответ 4

Классы полезны только тогда, когда у вас есть набор функциональных возможностей, чем взаимодействует с набором данных (свойствами экземпляра), которые должны сохраняться между вызовами функций и ссылаться дискретно.

Если ваш класс содержит ничего, кроме статических методов, то ваш класс просто синтаксический, и прямые функции намного понятнее и все, что вам нужно.

Ответ 5

Я согласен с Бенджамином. Вместо того, чтобы иметь кучу статических методов, вы, вероятно, должны иметь кучу функций. И если вы хотите их организовать, вы должны подумать об использовании модулей, а не классов. Однако, если вы хотите реорганизовать свой код как OO, это другое дело.

Ответ 6

Не только нет никаких преимуществ, но это замедляет работу, чем использование модуля, полного методов. Намного меньше нужно для статических методов в python, чем для них в java или С#, они используются в особых случаях.

Ответ 7

Зависит от характера функций. Если они не сильно не связаны (минимальное количество звонков между ними), и у них нет какого-либо состояния, тогда да, я бы сказал, дамп их в модуль. Однако вы можете стрелять в ногу, если вам когда-либо понадобится изменить поведение, когда вы бросаете наследование из окна. Поэтому мой ответ может быть, и убедитесь, что вы смотрите на свой конкретный сценарий, а затем всегда считаете, что модуль - лучший способ собрать набор методов.