如何在Python中使用类型注释来更改或缩小已声明变量的类型,以使或其他类型感知系统理解新类型。pycharm
例如,我可能有两个类:
class A:
is_b = False
...
class B(A):
is_b = True
def flummox(self):
return '?'
以及其他地方的另一个功能:
def do_something_to_A(a_in: A):
...
if a_in.is_b:
assert isinstance(a_in, B) # THIS IS THE LINE...
a_in.flummox()
只要我有声明,PyCharm就会明白我已经缩小到B类,而不是抱怨。没有它,将出现诸如之类的错误/警告。asserta_in.flummox()a_in has no method flummox
我的问题是,是否有PEP 484(或后继者)方法来显示(最初可能是A型或B型或其他东西)现在是B型而没有断言语句。该语句还给出了类型错误。a_inb_in : B = a_in
在TypeScript中,我可以做这样的事情:
if a_in.is_b:
const b_in = <B><any> a_in;
b_in.flummox()
// or
if a_in.is_b:
(a_in as B).flummox()
我不想使用断言行有两个主要原因是(1)速度对这部分代码非常重要,并且每次运行该行时都有一个额外的调用会使其速度过慢,以及(2)禁止裸断言语句的项目代码样式。is_instance
qq_花开花谢_0
相关分类