为类参数 Pylance

问题描述

当参数可以采用多个 (15+) 不同类时,输入提示的最佳方法是什么?

我有一个带有参数 Path 的类 action,可以执行许多不同类型的操作。每个操作都派生自基类 Action,并实现了与其兄弟类相比特定于该子类的某些内容

# path.py
class Path:
    def __init__(self,action)       # action: Any? Union[A,B,C,...]?
        # do some init stuff here
        
# actions.py
class Action:
    def __init__(self,...)
        # do some init stuff here

class ActionA(Action):
    def __init__(self,...)
        # do some init stuff here

class ActionB(Action):
    def __init__(self)
        # do some init stuff here


# plenty more Action subclasses
# in fact,in the future the list will probably keep growing
...

那里的大多数答案都只提到了 Union,但这仅对少数可能的类型有意义。我不认为我应该在 actions: Union[ClassA,ClassB,ClassC,...,ClassZ] 之类的参数上添加大行。无论如何,当我尝试时,Pylance 说的是 Argument to class must be a base classUnkNown type of base class,obscuring deriving type 或类似的。

于是我想到在第三个文件中创建一个 AllowedActions 类,该文件仅从所有可能的操作类继承。这个想法是让 Pathaction= 现在把 AllowedAction 作为一个包罗万象的:

class AllowedAction(ActionA,ActionB,ActionC,ActionZ):
    def __init__(self):
        pass

我不介意在此 Action 声明中添加 AllowedAction 子类,并且在 Path 中我可以只说 action: AllowedAction。但是,现在当我实例化 Path 并向其 action 参数(如 Path(action=ActionA())添加一些内容时,我得到了 Argument of type "ActionA" cannot be assigned to parameter "action" of type "AllowedAction"。显然是因为子类 ActionA 与包罗万象/子子类 AllowedAction 不一样,而是像 wth。

这让我相信 Path 我应该只分配 action: Any,但它似乎首先违背了类型提示的全部目的?

我不知道我是否应该以这种方式解决问题,或者我认为这一切都错了,应该重组继承或其他什么。有什么帮助吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...