Ответ 1
Если вы не хотите сделать его членом класса Table
, вы можете поместить его в модуль utilities
.
Мне нужно создать функцию, чтобы повернуть заданную матрицу (список списков) по часовой стрелке, и мне нужно использовать ее в моем классе Table
. Где я должен поместить эту служебную функцию (называемую rotateMatrixClockwise
), поэтому я могу легко ее вызвать из функции в классе Table
?
Если вы не хотите сделать его членом класса Table
, вы можете поместить его в модуль utilities
.
Сделать статической функцией...
Ваше определение будет:
@staticmethod
def rotateMatrixClockwise():
# enter code here...
Что сделает его вызываемым везде, где вы импортировали "таблицу", вызывая:
table.rotateMatrixClockwise()
Декоратору необходимо только сообщить python, что ожидаемый неявный первый аргумент не ожидается. Если вы хотите, чтобы определения методов действовали как С#/Java, где self всегда неявно, вы также можете использовать декоратор "@classmethod".
Здесь документация для этого поступает непосредственно из руководства python.
Примечание. Я бы рекомендовал использовать классы Utility только там, где их код нельзя связать напрямую с модулем, потому что они обычно нарушают " принцип единой ответственности 'ООП. Он почти всегда лучше связывать функциональность класса как метода/члена с классом.