python - 工厂函数作为实例化的类的静态成员

时间:2016-07-29 21:29:26

标签: python

我有一个类,它的存在 - 或不存在 - 取决于某些输入参数的正确性。

问题:
是否可以将该工厂函数创建为我想要实例的类的静态成员?这是最好的方式吗?

我最初尝试在__new__运算符内执行此操作,但人们说我应该使用工厂函数。

class MyClass:
    @staticmethod
    def GetAMy(arg):
        if arg == 5:
            return None
        else:
            return MyClass(arg)

2 个答案:

答案 0 :(得分:0)

使用@classmethod的另一种方法是将工厂函数放在与该类相同的文件中。

myclasses.py

def GetAMy(arg):
    if arg == 5:
        return None
    else:
        return MyClass(arg)

class MyClass(object):
    ...

然后从主文件中导入模块:

import myclasses
a=myclasses.GetAMy(5)

答案 1 :(得分:-1)

A Simple Factory in Python

import sys

class Usecase:
    @staticmethod
    def getClassFromStr(usecase):
        return getattr(sys.modules[__name__], usecase)

    @classmethod
    def getUsecase(cls, usecase):
      try:
        if issubclass(Usecase.getClassFromStr(usecase), Usecase):
            return Usecase.getClassFromStr(usecase)()
        else:
            print("Not a valid usecase")
            return None
      except AttributeError:
        print("Not a valid class")
        return None

class AllStops(Usecase):
    def __init__(self):
       print("AllStops")


class StopDetails(Usecase):
    def __init__(self):
       print("StopDetails")

class Other:
    def __init__(self):
       print("Other")



if __name__ ==  '__main__':
    a = Usecase.getUsecase("AllStops")
    b = Usecase.getUsecase("StopDetails")
    c = Usecase.getUsecase("ABC")
    d = Usecase.getUsecase("Other")