【问题标题】:Why use class method over a regular function in python为什么在 python 中使用类方法而不是常规函数
【发布时间】: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 风格?为什么你会选择一个而不是另一个

【问题讨论】:

标签: python python-3.x oop design-patterns


【解决方案1】:

工厂对象通常不被认为是非常 Python 的;面对这样的问题,一流的对象、方法或函数通常是更好的方法:

class Pet:
    pass

class Cat(Pet):
    pass

class Dog(Pet):
    pass

pets = {'cat': Cat, 'dog': Dog}

if __name__ == "__main__":
    pet = input()
    my_pet = pets[pet]()

有时,API 会通过名称以from_... 开头的工厂提供一组构造函数

def from_pet_name(pet: str)-> Pet:
    return pets[pet]()

【讨论】:

    猜你喜欢
    • 2013-10-26
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 2013-09-02
    • 2012-03-10
    相关资源
    最近更新 更多