我正在使用一个变量来保存不同类的工厂。 该代码可以运行,但是PyCharm IDE希望我注释工厂变量的类型,因为我正在调用它。
Q1:我应该如何注释“ factory”变量,XXX要插入什么类型? 问题2:这是对工厂进行编码的pythonic方法吗?
Foo(object):
pass
Bar:
pass
factory: XXX = Foo if something else Bar
instance = factory()
答案 0 :(得分:0)
我不知道这是最“ pythonic”的方式,但绝对是最明显的:
class A:
var = 1
class B:
var = 0
class C:
var = -1
class PseudoFactory:
@staticmethod
def get_constructor(some_argument):
if some_argument < 0:
return A
elif some_argument == 0:
return B
else:
return C
测试:
import random
for _ in range(10):
rand = random.randrange(-1, 2)
cls = PseudoFactory.get_constructor(rand)()
print(f"Value: {rand}\tClass: {type(cls)}\tVar: {cls.var}")
在这个简单的示例中,不必为“ factory”创建类,但是如果您需要做一些更高级的操作,它可能会很有用。无论如何,您可以将Just类的静态方法替换为Just函数。