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

如何将Page类的本地函数存储到Window类中并实现调用?

问题解决:Window与Page类的方法绑定与调用

核心问题分析

你的代码存在两个关键问题:

  • 直接写render_page1是Page类的未绑定方法,调用时必须传入Page实例作为第一个参数(self),但现有逻辑里没有传递,会触发参数错误。
  • display_page方法中直接使用id,没有通过self.id访问实例属性,会报NameError。

另外,你希望在Window的字典中存储Page实例的方法,本质是需要存储绑定方法(即与具体Page实例关联后的方法,调用时自动带入self),而非类的未绑定方法。


解决方案1:存储Page实例,按需调用方法

直接在Window的pages字典中存储Page实例,调用时通过实例访问对应方法:

class Window:
    def __init__(self):
        # 以页面id为键,存储对应的Page实例
        self.pages = {
            "1": Page("1", self),
            "2": Page("2", self)
        }

class Page:
    def __init__(self, id, window):
        self.id = id 
        self.window = window
        self.display_page()

    def display_page(self):
        # 根据当前实例的id,调用对应渲染方法
        current_page = self.window.pages[self.id]
        if self.id == "1":
            current_page.render_page1()
        elif self.id == "2":
            current_page.render_page2()

    def render_page1(self):
        print("执行页面1的渲染逻辑")

    def render_page2(self):
        print("执行页面2的渲染逻辑")

解决方案2:直接存储绑定方法(更贴合你的需求)

先创建Page实例,再将实例的绑定方法存入Window的字典,调用时直接执行方法即可:

class Window:
    def __init__(self):
        # 先创建Page实例,再提取其绑定方法存入字典
        page1 = Page("1", self)
        page2 = Page("2", self)
        self.pages = {
            "1": page1.render_page1,
            "2": page2.render_page2
        }

class Page:
    def __init__(self, id, window):
        self.id = id 
        self.window = window
        self.display_page()

    def display_page(self):
        # 直接从字典取出绑定方法并调用
        self.window.pages[self.id]()

    def render_page1(self):
        print("执行页面1的渲染逻辑")

    def render_page2(self):
        print("执行页面2的渲染逻辑")

说明

方案2中,page1.render_page1是绑定方法,它已经和page1实例关联,调用时会自动将page1作为self参数传入,无需手动传递,完全符合你最初希望的字典存储方法并直接调用的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 08:52:10