相关疑难解决方法(0)

类型提示中的子类

我想允许使用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
Run Code Online (Sandbox Code Playgroud)

现在输入以下代码时:

process_any_subclass_type_of_A(B)
Run Code Online (Sandbox Code Playgroud)

我得到一个PyCharm IDE提示'预期类型A,而不是类型[B].

如何在此处更改类型提示以接受A的任何子类型?

根据这个(https://www.python.org/dev/peps/pep-0484/#type-definition-syntax,"该参数也接受其类型是特定参数类型的子类型的表达式.") ,我明白我的解决方案(cls: A)应该有效吗?

python subclass type-hinting

20
推荐指数
4
解决办法
7873
查看次数

返回非实例化类类型的类型提示

我有一种情况,我想返回一个非实例化的类对象,一种类型。我会选择->type,因为非实例化类的类型为“type”,但该函数不应该返回“任何类类型”,我只对返回从 A 继承的类类型之一感兴趣,因为在实例化时我稍后将运行该类的对象的一些特定于它的方法。

为了更好地说明这一点,这里有一个示例代码。问题是在这种情况下可以添加一些合理的类型注释吗?或者如果不是,在这种情况下正确的做法是什么?

class A():
    def run(self):
        pass

class B(A):
    pass

class C(A):
    pass

def get_letter_class(condition: str) -> ?:
    if condition == 'b':
        return B
    elif condition == 'c':
        return C

class_type = get_letter_class('b')
letter = class_type()
letter.run()
Run Code Online (Sandbox Code Playgroud)

python oop inheritance type-hinting python-3.x

4
推荐指数
1
解决办法
2287
查看次数

标签 统计

python ×2

type-hinting ×2

inheritance ×1

oop ×1

python-3.x ×1

subclass ×1