我想允许使用Python 3进行类型提示,以接受某个类的子类。例如:
class A:
pass
class B(A):
pass
class C(A):
pass
def process_any_subclass_type_of_A(cls: A):
if cls == B:
# do something
elif cls == C:
# do something else
现在,当输入以下代码时:
process_any_subclass_type_of_A(B)
我得到一个PyCharm IDE提示“期望的类型A,取而代之的是Type [B]。”
如何更改此处的类型提示以接受A的任何子类型?
据此(https://www.python.org/dev/peps/pep-0484/#type-definition-
syntax
,“该类型的参数也接受该类型是特定参数类型的子类型的表达式。”) ,我知道我的解决方案(cls: A)
应该可行?
当您指定时cls: A
,是说要cls
使用type的
实例A
。指定cls
为类型A
(或其子类型)使用的类对象的类型提示typing.Type
。
from typing import Type
def process_any_subclass_type_of_A(cls: Type[A]):
pass
From类对象的类型 :
有时您想谈论从给定类继承的类对象。可以将其拼写为
Type[C]
哪里C
是一堂课。换句话说,当C
是类的名称时,使用C
注释一个参数声明该参数是C
(或的子类的C
)实例,但是使用Type[C]
注释作为变量的声明则声明该参数是源自C
(的)类对象。或C
本身)。
我希望允许使用Python 3进行类型提示以接受某个类的子类。例如。: 现在当键入以下代码时: 我收到一个 PyCharm IDE 提示“预期的类型 A,而是获得类型 [B]。 如何在这里更改类型提示以接受? 根据PEP 484(“类型为特定参数类型的子类型的表达式也可用于该参数。”),我知道我的解决方案< code>(cls: A)应该可以工作?
问题内容: class Node: def append_child(self, node: Node): if node != None: self.first_child = node self.child_nodes += [node] 我该怎么办?因为当我运行它时,它说。 我应该只删除and实例在函数中检查它吗?但是,我该如何访问的属性(我希望它是类的实例)? 我不知道如何在Python,
问题内容: 在PEP 484中 ,包含模块的类型提示已添加到Python 3中。在Python 2中有什么方法可以做到这一点?我能想到的就是有一个装饰器来添加到检查类型的方法中,但这将在运行时失败,并且不会像提示所允许的那样被较早地捕获。 问题答案: 根据 Python 2.7的建议语法和 定义类型提示的PEP 484中的 跨代码 ,存在与Python 2.7兼容的另一种语法。但是,它不是强制性的
我试图在Python3.5中使用类型提示。1,代码如下: 我猜在解析类型A时,类型A还没有完全构造,这是范围界定的问题,但我不理解为什么这样的语法不正确。是否有其他方式来表达它,或者它只是一个非法的构造? 我想在基类中使用这个语法提示,它可以在树状层次结构中组成派生类。
问题内容: 只是好奇是否有一种方法可以在netbeans中为常规变量提供类型提示,以便intellisense可以选择。我知道您可以针对类属性,函数参数,返回类型等执行此操作,但是我不知道如何针对常规变量执行此操作。在您拥有可以返回不同对象类型(例如服务定位符)的方法的情况下,这确实有帮助。 例如: 之后使用$ someService的地方,netbeans将提供在Some_Service类中定义
怎么修改让下面的红线消失?