如何注释包含类对象的变量的类型

时间:2019-08-17 16:05:32

标签: python annotations metaprogramming

我正在使用一个变量来保存不同类的工厂。 该代码可以运行,但是PyCharm IDE希望我注释工厂变量的类型,因为我正在调用它。

Q1:我应该如何注释“ factory”变量,XXX要插入什么类型? 问题2:这是对工厂进行编码的pythonic方法吗?

Foo(object):
    pass

Bar:
    pass


factory: XXX = Foo if something else Bar

instance = factory()

1 个答案:

答案 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函数。