Предположим, у меня есть файл, foo.py
содержащий класс Foo
:
class Foo(object):
def __init__(self, data):
...
Теперь я хочу добавить функцию, которая Foo
определенным образом создает объект из необработанных исходных данных. Должен ли я поместить его как статический метод в Foo или как другую отдельную функцию?
class Foo(object):
def __init__(self, data):
...
# option 1:
@staticmethod
def fromSourceData(sourceData):
return Foo(processData(sourceData))
# option 2:
def makeFoo(sourceData):
return Foo(processData(sourceData))
Не знаю, важнее ли быть удобным для пользователей:
foo1 = foo.makeFoo(sourceData)
или более важно поддерживать четкую связь между методом и классом:
foo1 = foo.Foo.fromSourceData(sourceData)
@classmethod
см. Значение @classmethod и @staticmethod для начинающих?