สมมติว่าฉันมีไฟล์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 สำหรับผู้เริ่มต้น