PYTHON3:如何使用稍后为函数注释定义的类型?

2024-04-26 02:44:34 发布

您现在位置:Python中文网/ 问答频道 /正文

问题是这样:

class A():
    def foo() -> B:
        pass

class B():
    def bar() -> A:
        pass

这将引发名称错误:未定义名称“B”。

因此,为了检查类型,我不愿意将->;B更改为->;“B”。那有什么办法吗?


为了进一步讨论,我真的看不到注释中的任何点,如“def foo(a:'x',b:5+6,c:list)->;max(2,9):(在PEP 3107中)。为什么python会威胁这些注释来表达?


Tags: gt名称类型foodef错误barpass
2条回答

好吧,没有办法直接使用注释语法来实现,但是可以修改函数对象的__annotations__字典。在

class A():
    def foo():
        pass

class B():
    def bar() -> A:
        pass

A.foo.__annotations__["return"] = B

我找到了一个解决方法,它非常类似于c/c++

在Pycharm 3中测试

class A: pass
class B: pass

class A(object):

    def foo(self, b: B) -> B:

        #CAN auto complete
        b.bar()

        return B()

class B(object):

    def bar(self) -> A:

        return A()

#CAN auto complete
A().foo(B()).bar()

相关问题 更多 >