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

Python3类函数无法打印问题咨询(《笨办法学Python3》学习疑问)

解决调用类enter方法无输出的问题

嘿,我看你在啃《笨办法学Python3》的时候,卡在了__init__方法和类函数调用的地方,咱们来把这个问题捋明白~

首先看你给出的代码,核心问题很明确:你定义了FirstScene的enter方法,但从来没主动调用它! 而且game_start ...这部分明显没写完,这就是为什么你看不到输出的原因。

先给你补全并修正代码,咱们边看边解释:

class FirstScene(object):
    def enter(self):
        print("printing scene 1")

class SecondScene(object):
    # 给这个类也加上enter方法,避免切换场景时报错
    def enter(self):
        print("printing scene 2")

class Map(object):
    # 这里存储所有场景的实例
    scenes = {
        "scene_one": FirstScene(),
        "scene_two": SecondScene()
    }

    def __init__(self, start_scene):
        # __init__是构造函数,创建Map实例时自动执行
        # 这里把传入的起始场景对应的实例赋值给current_scene属性
        self.current_scene = self.scenes[start_scene]

    def play(self):
        # 新增一个方法来触发场景的enter逻辑
        self.current_scene.enter()

# 启动游戏的完整代码
game_start = Map("scene_one")
game_start.play()

现在来拆解关键知识点:

  • __init__方法的作用:它是类的构造函数,当你创建类的实例(比如Map("scene_one"))时,Python会自动调用这个方法,用来初始化实例的属性(比如这里的current_scene)。它的核心是给实例绑定初始状态,而不是直接执行业务逻辑。
  • 类方法的调用逻辑:你在FirstScene里写的enter方法,属于实例方法——必须通过类的实例(比如FirstScene()创建的对象)去调用,才会执行里面的代码。之前你只是在Map的scenes字典里创建了FirstScene的实例,但没调用它的enter,所以自然不会输出内容。
  • 类体代码和方法代码的区别:如果你直接在类内部写print语句(比如class FirstScene(object): print("xxx")),那Python加载这个类的时候就会执行,所以能看到输出,但这和方法调用完全是两回事——类体代码是定义类时执行,方法代码是调用时才执行。

运行上面的修正代码,你就能看到printing scene 1的输出啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:15:45