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

