【发布时间】:2018-11-19 21:03:15
【问题描述】:
假设我想要一个对象,它根据输入实例化类并在调用时返回它。
from pets import Dog, Cat
class PetCreator:
@classmethod
def __call__(cls, pet_type):
if pet_type == "cat": return Cat()
elif pet_type == "dog": return Dog()
else: raise SomeError
def pet_creator(pet_type):
if pet_type == "cat": return Cat()
elif pet_type == "dog": return Dog()
else: raise SomeError
if __name__ == "__main__":
fav_pet_type = input() # "cat"
my_cat = pet_creator(fav_pet_type) #this?
my_cat = PetCreator(fav_pet_type) #or that?
哪种设计更符合 Python 风格?为什么你会选择一个而不是另一个
【问题讨论】:
-
PetCreator(fav_pet_type)不会调用__call__类方法,它会调用object.__init__并以TypeError: object() takes no parameters失败,所以我会坚持使用有效的方法。
标签: python python-3.x oop design-patterns