Załóżmy, że mam plik foo.py
zawierający klasę Foo
:
class Foo(object):
def __init__(self, data):
...
Teraz chcę dodać funkcję, która tworzy Foo
obiekt w określony sposób z surowych danych źródłowych. Czy powinienem umieścić go jako metodę statyczną w Foo, czy jako inną osobną funkcję?
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))
Nie wiem, czy ważniejsza jest wygoda dla użytkowników:
foo1 = foo.makeFoo(sourceData)
lub czy ważniejsze jest zachowanie wyraźnego sprzężenia między metodą a klasą:
foo1 = foo.Foo.fromSourceData(sourceData)
@classmethod
, zobacz Znaczenie @classmethod i @staticmethod dla początkujących?