通用单身人士的类型提示?

时间:2017-03-26 00:02:41

标签: python generics types singleton hint

我有一个基本服务,它为所有服务提供通用方法。此外,此BaseService用作服务注册表:

class BaseService:
    instances = {}

    @classmethod
    def get_instance(cls) -> 'BaseService':
        if cls.instances.get(cls) is None:
            cls.instances[cls] = cls()
        return cls.instances[cls]

class Service1(BaseService):
    pass

class Service2(BaseService):
    pass

Service1.get_instance()
Service2.get_instance()
Service1.get_instance()

get_instance()方法正在返回子类实例,我觉得当前注释-> 'BaseService'是incorect。我应该如何正确地注释这个方法?

1 个答案:

答案 0 :(得分:2)

正如我在评论中所说,为基类的类方法做这个是 有问题,因为根据定义,该方法将与任何子类共享。对于单身人士来说尤其如此。

解决方法是为每个子类赋予自己类似命名的方法,并使用正确的返回值注释。虽然这可以通过类装饰器完成,如我的答案的早期版本所示,使用元类似乎是一种更清晰的方法,所以我相应地更新了我的答案:

bias