Где я могу разместить служебные функции в моем проекте Python? - PullRequest
12 голосов
/ 16 июня 2010

Мне нужно создать функцию для вращения данной матрицы (списка списков) по часовой стрелке, и мне нужно использовать ее в моем классе Table. Где я должен поместить эту служебную функцию (называемую rotateMatrixClockwise), чтобы я мог легко вызывать ее из функции в моем Table классе?

Ответы [ 2 ]

11 голосов
/ 17 июня 2010

Сделать статическую функцию ...

  • добавить декоратор @staticmethod
  • не включайте 'self' в качестве первого аргумента

Ваше определение будет:

@staticmethod
def rotateMatrixClockwise():
    # enter code here...

Что делает его вызываемым везде, где вы импортировали «таблицу», путем вызова:

table.rotateMatrixClockwise()

Декоратор необходим только для того, чтобы сообщить python, что не ожидается неявный первый аргумент. Если вы хотите, чтобы определения методов действовали как C # / Java, где self всегда неявно, вы также можете использовать декоратор @classmethod.

Вот документация для этого, пришедшая прямо из руководства по питону.

Примечание. Я бы рекомендовал использовать классы Utility только в тех случаях, когда их код не может быть напрямую связан с модулем, поскольку они обычно нарушают « Принцип единой ответственности » ООП. почти всегда лучше связать функциональность класса как метода / члена с классом.

4 голосов
/ 16 июня 2010

Если вы не хотите делать его членом класса Table, вы можете поместить его в модуль utilities.

...