gpt4 book ai didi

python - 类型提示子类返回 self

转载 作者:行者123 更新时间:2023-12-01 15:53:37 26 4
gpt4 key购买 nike

有什么方法可以键入抽象父类方法,以使子类方法返回自身而不是抽象父类。

class Parent(ABC):
@abstractmethod
def method(self) -> [what to hint here]:
pass

class Child1(Parent)
def method(self):
pass

def other_method(self):
pass

class GrandChild1(Child1)
def other_method_2(self):
pass

这更多地改善了PyCharm或VScode的python插件等IDE的自动完成功能。

最佳答案

因此,一般方法在here文档中进行了描述

import typing
from abc import ABC, abstractmethod

T = typing.TypeVar('T', bound='Parent') # use string

class Parent(ABC):
@abstractmethod
def method(self: T) -> T:
...

class Child1(Parent):
def method(self: T) -> T:
return self

def other_method(self):
pass

class GrandChild1(Child1):
def other_method_2(self):
pass

reveal_type(Child1().method())
reveal_type(GrandChild1().method())
mypy给我们:
test_typing.py:22: note: Revealed type is 'test_typing.Child1*'
test_typing.py:23: note: Revealed type is 'test_typing.GrandChild1*'

请注意,我必须继续使用类型变量来使它起作用,因此当我最初尝试在子类注释中使用实际的子类时,它(错误地?)继承了孙子类型:
class Child1(Parent):
def method(self) -> Child1:
return self

我会得到mypy的:
test_typing.py:22: note: Revealed type is 'test_typing.Child1'
test_typing.py:23: note: Revealed type is 'test_typing.Child1'

同样,我不确定这是否是预期的/正确的行为。 mypy documentation当前有一个警告:

This feature is experimental. Checking code with type annotations for self arguments is still not fully implemented. Mypy may disallow valid code or allow unsafe code.

关于python - 类型提示子类返回 self ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58986031/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com