gpt4 book ai didi

带有抽象基类的 Python 类型提示

转载 作者:行者123 更新时间:2023-12-03 13:41:29 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How do I type hint a method with the type of the enclosing class?

(6 个回答)


7 个月前关闭。




我有一个 ABC 方法,子类应该返回他们自己的类型,我正在尝试找出最好的方法来提示这个。例如:

from abc import ABC, abstractmethod

class Base(ABC):
@abstractmethod
def f(self): ## here i want a type hint for type(self)
pass

class Blah(Base):
def __init__(self, x: int):
self.x = x

def f(self) -> "Blah":
return Blah(self.x + 1)
我能想到的最好的是这个,它有点沉重:
from abc import ABC, abstractmethod
from typing import TypeVar, Generic

SELF = TypeVar["SELF"]

class Base(ABC, Generic[SELF]):

@abstractmethod
def f(self) -> SELF:
pass

class Blah(Base["Blah"]):

def __init__(self, x: int):
self.x = x

def f(self) -> "Blah":
return Blah(self.x+1)
我有更好/更清洁的方法吗?

最佳答案

使用 python 3.7,它通过从 __future__ 导入注释来工作

from __future__ import annotations

class Base():
def f(self) -> Base: ## Here the type is Base since we can not guarantee it is a Blah
pass

class Blah(Base):
def __init__(self, x: int):
self.x = x

def f(self) -> Blah: ## Here we can be more specific and say that it is a Blah
return Blah(self.x + 1)

关于带有抽象基类的 Python 类型提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62779583/

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