【发布时间】:2022-01-22 01:55:26
【问题描述】:
我们正在向我们的代码库添加类型提示,并且有一种特殊情况我不知道如何进行正确的类型提示。我们有一个函数,如果它还不存在,它将创建一个特定类的实例。它创建对象的类在函数本身中定义,以使其成为单例。以下代码中给出了此类函数的示例:
__GREETER = None
def get_greeter():
global __GREETER
class Greeter:
def greet_user(name: str):
print(f'Hello {name}')
if not __GREETER:
__GREETER = Greeter()
return __GREETER
我现在想知道如何为 get_greeter() 函数的返回类型添加类型提示。我可以只使用get_greeter() -> 'Greeter' 还是应该做一些不同的事情?
注意,自 python 3 以来确实有更简洁的方法来定义单例,但重构是积压的事情。
【问题讨论】:
-
如果您将
Greeter类移出get_greeter函数,则解决方案变得微不足道。 “我可以使用...” - 不(你试过了吗?)。 -
无论如何,鉴于您当前的代码,我不知道有什么方法可以注释
get_greeter的返回类型,因为函数外部不知道返回类型。 -
我认为 OP 正试图将班级锁定。 Python 不符合约定和协作,它不是 Java
-
我没有看到将类放入函数中的任何特殊原因。每次调用
get_greeter时,它都会被重新定义(不必要地)。只需将类定义放在函数之外。 -
@soetaertie 一旦调用了
get_greeter,任何人都可以创建Greeter的实例:f = get_greeter(); g = type(f)()。
标签: python type-hinting