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

PyTorch中定义在__init__后的make_gen_block为何可在__init__内调用

调用生效的核心原因
  • 首先要明确Python类的两个阶段的执行逻辑:类定义阶段和实例化阶段的执行时机完全分离
    • 类定义阶段:Python会从上到下依次执行类体内的顶层代码,遇到def关键字时,只会把对应的函数对象绑定为类的属性,不会执行函数内部的代码。也就是说__init__、make_gen_block这些方法的内部逻辑,在类定义阶段完全不会运行,只是把这些方法存到了Generator类的属性空间里。
    • 实例化阶段:只有当你执行Generator()创建类的实例时,才会触发__init__方法的内部代码运行。这个时候整个Generator类已经完成了全部定义,写在__init__后面的make_gen_block方法早就已经绑定到类上了,实例self自然可以正常访问到这个方法。
  • 你之前的误解是把「方法的定义顺序」和「方法内部代码的执行顺序」搞混了:如果是类定义阶段就需要直接执行的代码(比如直接在类顶层写调用方法的代码),才要求被调用的方法定义在前面;而__init__是实例化阶段才执行的逻辑,不受类内部方法定义顺序的影响。

反例(会报错的写法):

class Test:
    # 类顶层直接执行调用,属于类定义阶段的代码,此时func还没定义,会报错
    a = func(1)

    def __init__(self):
        pass

    def func(self, x):
        return x

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:30:01