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

Python类构造函数调用后续定义方法的原理疑问

问题解答:Python类中__init__调用后定义的方法为何可行?

相关代码

class User:

    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.say_hello()

    def say_hello(self):
        print(f"Hi my name is {self.name} and I am {self.age}")

user = User("Cristian", 19)

输出

Hi my name is Cristian and I am 19

疑问

创建类的实例时会执行构造函数__init__,但该代码中__init__内部调用了say_hello方法,而该方法的定义位于__init__之后,为何未预先定义的方法可以被成功调用?


解答

这是由Python处理类定义的机制决定的:

  • 类定义是整体执行的:当Python解释器解析class User:代码块时,会先执行块内所有代码(包括所有方法的定义),把所有方法都注册到User类对象的命名空间中,等整个类的定义完成后,才允许创建类的实例。
  • 实例化时类已完全就绪:当你调用User("Cristian", 19)创建实例时,User类已经被完整定义,say_hello方法早已存在于类的属性中。此时执行__init__里的self.say_hello(),self作为类的实例,会通过类的命名空间找到say_hello方法并执行。

简言之,类内部方法的定义顺序不影响实例化时的调用,因为类的所有成员在实例创建前就已经全部加载完毕了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:21:00