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

如何将内部类实例绑定到外部类实例?基于OuterBase的实现

代码先行

我们的目标是设计OuterBase类,使得以下代码能够通过验证:

class Outer(OuterBase):
    def __init__(self, foo: str) -> None:
        self.foo = foo

    class Inner:
        outer: Outer

        def get_foo(self) -> str:
            return self.outer.foo


inner = Outer("bar").Inner()
assert inner.get_foo() == "bar"

我的问题与另一问题密切相关,但存在关键差异:那个问题聚焦于从内部类访问外部类,而我的问题则是要访问外部类的特定实例。

问题

已知Outer类及其内部定义的Inner类,以及一个Outer的实例,能否将该实例传入Inner的构造函数,从而将Inner实例与该Outer实例绑定?

即当执行outer = Outer()和inner = outer.Inner()后,inner的某个属性能持有outer的引用。

次要要求

1)尽可能简化使用(最小化样板代码)

理想情况下,实现实例绑定的全部逻辑应封装在Outer类中。用户只需继承OuterBase类,定义约定好名称的Inner类,即可预期其outer属性持有外部类实例的引用。对内部类使用装饰器、显式传入元类或定义特殊__init__方法等方案均视为次优。

2)尽可能保证类型安全

实现代码和使用代码应能通过mypy --strict检查,尽可能减少动态类型的使用。

假设实际应用场景

例如,内部类可作为外部类实例的配置容器,类似Pydantic的设计。Pydantic中的内部Config类是类级配置,适用于模型(外部类)的所有实例。而采用本文探讨的方案后,Pydantic模型的使用方式保持不变,但可通过将特定Config实例绑定到特定模型实例,实现实例级的配置差异。

内容的提问来源于stack exchange,提问作者Daniel Fainberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:40:37