假设我有两个班级,
A
和B
:
class A:
def f() -> bool:
...
class B:
def f() -> bool:
...
后来我输入这些别名:
from typing import Union
FClass: TypeAlias = Union[A, B]
这样我在另一个地方就可以有一个函数:
def g() -> FClass:
... # Returns an object that is either A or B.
n = g()
n.f() # This complains!
这里对
f()
的调用对于检查器来说看起来很糟糕,因为 f()
没有在 FClass
上声明,即使它在所有可能的类型上都声明了。有没有办法声明该方法将始终存在于具有该别名的类上(类似于 Java 接口)?或者有更好的方法来解决这个问题吗?具体投诉:
'A | B' has no attribute 'f'
请注意,
A
和B
不受我的控制,g()
的内部结构也是如此。实际用例是一个多轨库(即“alpha”、“beta”、“一般受众”),它们具有不同的生成内部对象,但共享一个 API。