• 2024-09-30Python 类型检查的利器
    Python类型检查的利器在Python编程中,类型注解(typehints)逐渐成为提高代码质量的重要工具。然而,Python的动态类型特性意味着类型错误可能在运行时才显现,这往往导致调试困难和运行时错误。为了解决这一问题,mypy提供了一种静态类型检查的解决方案,帮助开发者在编码阶段发现潜
  • 2024-08-08行为类似于基本类型的泛型类型
    我想创建一个泛型类型A[T],其行为与T完全相同,只不过我可以在运行时告诉我该类型实际上是A[T]而不是T我尝试过classA(Generic[T],T):pass但是似乎不起作用,正如mypy抱怨的那样,例如,A[str]的类型为object作
  • 2024-08-08函数返回类型联合的赋值中的不兼容类型
    修复此类函数的mypy的最佳方法是什么?fromtypingimportUniondefa(b:int)->Union[int,str]:ifb:returnbelse:return'2'c:int=a(1)d:str=a(0)mypy结果:error:Incompatibletypesinassignment(expressionhasty
  • 2024-08-08Python @overload 使用联合类型会导致函数签名重叠错误
    我想编写以下重载的Python函数:fromtypingimportAny,TypeVar,overload_T1=TypeVar('_T1')_T2=TypeVar('_T2')_T3=TypeVar('_T3')@overloaddefparse_as(ty:type[_T1]|type[_T2],s:bytes)->_T1|_T2:...@overload
  • 2024-08-07mypy 的 lxml 类型提示
    您好,我正在尝试使用types-lxml库输入提示lxml返回类型。defparse_xml(path:str)->etree._ElementTree:returnetree.parse(path)defcomponents(path:str)->List[etree._Element]:returnparse_xml(path).xpath("/node1/node2")但是mypy抱怨
  • 2024-08-04如何为可以在递归调用中重新分配的 python 函数制定类型提示?
    采取以下最小示例:S=TypeVar("S",bound=int|str)defmeth(a:S)->S:ifa=="5":returnstr(meth(int(a)))returna特别是,上面的方法可以采用字符串或整数。它总是返回与其输入相同类型的值,但它可以递归地调用自身,在这种情况下,S的值
  • 2024-08-04textx 模型的类型检查
    我正在尝试使用python的textx模块来解释语法的语言原型。我正在创建一个像这样的模型:fromtextximportmetamodel_from_strfunl_grammar="""Model:statement*=Statement;Statement:FunctionDefinition|Function;FunctionDefinition:name=ID
  • 2024-07-31mypy 从被调用函数推断类型签名
    有没有办法从被调用函数推断调用者的类型签名?在下面的示例中,(重载)Test1.f函数按预期工作。Test2.get_arg().f也有效。问题是:以类型安全的方式实现Test2.f的正确(最短)方法是什么,或者最接近的解决方法是什么?Test2.f只是Test2.get_a
  • 2024-07-31具有自引用的类装饰器的 Python 类型提示
    我的最终目标是编写一个系统来轻松记录函数调用(特别是类方法)。我首先编写一个带有包装方法的类Loggable,该方法允许我装饰子类方法并记录它们的调用|||现在我可以编写子类并记录它们的调用:Param=ParamSpec("Param")RetType=TypeVar("RetType")CountType=
  • 2024-07-31如何检查具体方法是否遵守抽象方法的类型提示
    这是一个由两部分组成的问题,但第二部分依赖于第一部分。出于教育目的,我试图为组实现一个抽象基类和测试套件(概念来自抽象代数)。代数群定义的一部分相当于类型约束,我想在ABC上实现该类型约束,并且如果具体类上的方法不符合该约束,就会有一些抱怨。I对于逻辑
  • 2024-07-30Mypy:属性设置器分配中的类型不兼容
    我想与mypy一起使用propertysetter属性getter和setter的类型不同:fromtypingimportList,IterableclassFoo:@propertydefx(self)->List[int]:[email protected](self,new_x:Iterable[int]):...foo=Foo()
  • 2024-07-30为什么参数类型“Dict[str, Union[str, int]]”不接受类型“Dict[str, str]”的值(mypy)
    我有一个传递给模板的变量字典的类型:VariablesDict=Dict[str,Union[int,float,str,None]]基本上,任何字典,其中键是字符串,值是字符串、数字或None。我在几个与模板相关的函数中使用这种类型。以这个示例函数为例:defrender_template(name:str,variables:Vari
  • 2024-07-30Python:在 Protocol 和 TypedDict 之间共享类型注释
    举这个简单的例子:from__future__importannotationsimporttypingastclassMyType:def__init__(self,s:str,i:int)->None:self.s=sself.i=iclassMyProto(t.Protocol):s:stri:intclassMyDict(t.TypedDict):
  • 2024-07-30如何注释可以实现为属性的属性?
    我试图让mypy对我的类型注释感到满意。这是一个最小的例子:classFooInterface:x:intclassFooWithAttribute(FooInterface):x:int=0classFooWithProperty(FooInterface):@propertydefx(self)->int:return0以我人类的理解,一
  • 2024-07-30如何使用支持简单类型和属性的字段声明协议?
    (相关但不重复:如何注释可以实现为属性的属性?)我想创建一个Protocol,其中字段可以通过简单类型和财产。例如:classP(Protocol):v:int@dataclassclassFoo(P):v:intclassBar(P):@propertydefv(self)->int:#ERROR
  • 2024-07-30当 functools.wraps() 用于泛型函数时,Mypy 1.10 报告错误
    TLDR;我有一个装饰器:更改函数签名包装的函数使用一些泛型类型参数除了我想使用的签名funtools.wraps以保留其余部分信息。有什么办法可以在不抱怨的情况下实现这一目标吗?mypy更多背景一个最小的工作示例如下所示:这
  • 2024-07-29使用与枚举子集的匹配进行详尽匹配
    给出以下定义:classMyEnum(IntEnum):a=1b=2c=3d=4我正在寻找一个替换SomeExpression的表达式,它将静态断言值myEnum是该分支中的MyEnum.c|MyEnum.d–这样底部的“从不”情况就正确了推断类型never–当
  • 2024-07-28`mypy` 如何知道 pydantic 模型的签名?
    mypy如何以这种方式知道pydantic模型的签名?frompydanticimportBaseModelclassModel(BaseModel):a:intModel(a='asd')#error:Argument"a"to"Model"hasincompatibletype"str";expected"int"
  • 2024-07-28如何注释函数生成数据类?
    假设您想像这样包装dataclass装饰器:fromdataclassesimportdataclassdefsomething_else(klass):returnklassdefmy_dataclass(klass):returnsomething_else(dataclass(klass))应该如何my_dataclass和/或something_else注释
  • 2024-07-28当 mypy 无法注释时,为什么它会抱怨列表理解?
    为什么Mypy抱怨它需要列表理解变量的类型注释,而无法使用MyPy注释此类变量?具体来说,如何解决以下错误:fromenumimportEnumMetadefspam(y:EnumMeta):return[[x.value]forxiny]
  • 2024-07-27如何在Python中继承类型提示?
    所以我的问题是,当我有一个A类型的类来做事情并且我使用这些函数作为subclass(B)时,它们仍然是类A的类型,并且不接受我的类B对象作为参数或作为函数签名。我的问题简化了:fromtypingimportTypeVar,Generic,CallableT=TypeVar('T'
  • 2024-07-27mypy:方法的参数与超类型不兼容
    看示例代码(mypy_test.py):importtypingclassBase:deffun(self,a:str):passSomeType=typing.NewType('SomeType',str)classDerived(Base):deffun(self,a:SomeType):pass现在mypy抱怨:mypymypy_test.pymypy_test.
  • 2024-07-25用于用 NotRequired 替换自定义 TypeAlias 的 Mypy 插件
    我想编写一个mypy插件,以便为NotRequired[Optional[T]]引入类型别名。(正如我在这个问题中发现的,不可能用普通的python编写这个类型别名,因为NotRequired在TypedDict定义之外不允许使用。)我的想法是定义一个通用Possibly类型,如
  • 2024-07-25非泛型类方法上的字典类型变量
    在以下代码中:fromtypingimportGenericfromtypingimportTypeVarfromtypingimportreveal_typeT=TypeVar('T')classField(Generic[T]):"""Afielddefinitionwithadefaultvalue."""def__init__(self,
  • 2024-07-24如何使用 mypy 的类型检查来强制可调用类型的签名
    我有一个函数,它接受另一个函数x作为其参数。函数x可以有2种不同类型的签名,我想通过类型提示来强制执行此操作:TYPE_A=Callable[[int,int],int]TYPE_B=Callable[[int],int]defmy_func(x:Union[TYPE_A,TYPE_B])->None:...determinexisofwhichtype