我有一个基本服务,它为所有服务提供通用方法。此外,此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。我应该如何正确地注释这个方法?
答案 0 :(得分:2)
正如我在评论中所说,为基类的类方法做这个是 有问题,因为根据定义,该方法将与任何子类共享。对于单身人士来说尤其如此。
解决方法是为每个子类赋予自己类似命名的方法,并使用正确的返回值注释。虽然这可以通过类装饰器完成,如我的答案的早期版本所示,使用元类似乎是一种更清晰的方法,所以我相应地更新了我的答案:
bias