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

Python如何实现可继承的自定义类构造器(类方法)?

问题原因

你写法的核心错误是混淆了类型标注对象和实际运行时对象:Type[T]是用来给cls做类型标注的语法,本身不能作为构造器调用。类方法的第一个参数cls就代表当前发起调用的类(父类调用时是Parent,子类调用时是Child),直接用它来实例化即可。

修正后完整代码
from dataclasses import dataclass
from typing import Type, TypeVar

# 给TypeVar加上绑定约束,明确T只能是Parent及其子类的类型
T = TypeVar("T", bound="Parent")


@dataclass
class Parent:
    something: int = 2

    @classmethod
    def from_float(cls: Type[T], something_as_float: float) -> T:
        # 直接用cls实例化,运行时cls就是调用该方法的类
        return cls(something=int(something_as_float))


@dataclass
class Child(Parent):
    """ 可以正常继承from_float构造方法
    """


assert isinstance(Parent.from_float(1.0), Parent)
assert isinstance(Child.from_float(1.0), Child)
验证说明

上述代码可正常通过mypy类型检查,运行时两个断言也会全部通过,完美满足可继承自定义构造器的需求。

内容的提问来源于stack exchange,提问作者Andrew Wagner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:48:03