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
相关产品推荐
相关产品推荐

