You need to enable JavaScript to run this app. Python中如何从嵌套内部类访问外部类的实例属性
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何从嵌套内部类访问外部类的实例属性

解决方案

Python的嵌套类默认不会自动持有外部类的实例,我们需要手动将Pair实例传递给内部History类来获取name属性,按照你期望的调用方式,可参考以下实现:

from statistics import stdev

# 假设这是你已有的获取历史数据的方法
def retrieve_history(product, granularity, start, end):
    # 你的业务实现逻辑
    pass

class Pair:
    def __init__(self, base_currency, quote_currency):
        self.base_currency = base_currency
        self.quote_currency = quote_currency
        self.name = f'{base_currency}-{quote_currency}'

    @property
    def History(self):
        # 包装构造器,调用时自动传入当前Pair实例
        def create_history(granularity, start, end):
            return self._History(granularity, start, end, self)
        return create_history

    class _History:
        def __init__(self, granularity, start, end, pair):
            # 从传入的Pair实例直接获取name属性
            self.name = pair.name
            self.granularity = granularity
            self.start = start
            self.end = end

        def data(self):
            return retrieve_history(product=self.name, granularity=self.granularity, start=self.start, end=self.end)

        @property
        def std_dev(self):
            # 注意调用实例方法需要加括号
            return stdev(self.data())

调用方式和你期望的完全一致:

from datetime import date
start_date = date(2024,1,1)
end_date = date(2024,6,1)

pair = Pair(base_currency='USD', quote_currency='GBP')
print(pair.History(granularity='1D', start=start_date, end=end_date).std_dev)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 17:06:08