我有一个类,它的存在 - 或不存在 - 取决于某些输入参数的正确性。
问题:
是否可以将该工厂函数创建为我想要实例的类的静态成员?这是最好的方式吗?
我最初尝试在__new__
运算符内执行此操作,但人们说我应该使用工厂函数。
class MyClass:
@staticmethod
def GetAMy(arg):
if arg == 5:
return None
else:
return MyClass(arg)
答案 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)
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")