You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

类属性多类型场景下,函数仅接受子集的Python类型提示方法

为函数添加针对类属性子集的类型提示

当类的属性支持多种类型,但函数仅能处理其中一部分时,可以通过以下几种方式明确类型提示:

1. 使用泛型类(推荐用于可提前规划类型参数的场景)

通过泛型让类的属性类型可参数化,函数直接指定接受特定类型参数的类实例:

import dataclasses
from typing import Generic, TypeVar

# 限定类型变量只能是int或str
T = TypeVar('T', int, str)

@dataclasses.dataclass
class Foo(Generic[T]):
    a: T

def plus_1_a(foo: Foo[int]) -> None:
    """仅接受a为int类型的Foo实例"""
    foo.a += 1

2. 创建子类(直观易懂的方案)

定义继承自原类的子类,重写属性类型为目标子集,函数接受该子类实例:

import dataclasses

@dataclasses.dataclass
class Foo:
    a: int | str

@dataclasses.dataclass
class FooInt(Foo):
    a: int  # 重写属性,限定为int类型

def plus_1_a(foo: FooInt) -> None:
    """仅接受FooInt类型的实例(即a为int的Foo)"""
    foo.a += 1

3. 使用Protocol(Python 3.8+,无需修改原类的灵活方案)

定义一个协议,要求对象拥有指定类型的属性,函数接受符合该协议的对象:

import dataclasses
from typing import Protocol

class HasIntA(Protocol):
    a: int

@dataclasses.dataclass
class Foo:
    a: int | str

def plus_1_a(foo: HasIntA) -> None:
    """仅接受拥有int类型a属性的对象"""
    foo.a += 1

内容的提问来源于stack exchange,提问作者Paulo Costa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 16:22:38