为什么Python中实例属性需要像示例代码中这样进行三次定义?
问题解答
对应的示例代码如下:
class Details(): def __init__(self,name,age): self.name = name self.age = age
首先得纠正一个误解:这三个位置的同名变量根本不是「三次定义实例属性」,只是大家习惯把参数和属性名写一致方便阅读而已,三者的作用完全不一样:
__init__括号里的name、age是初始化方法的局部入参,仅用来接收创建实例时外部传入的值,作用范围只限于__init__方法内部。你要是愿意,把参数名改成n、a也完全能正常运行,和后续的实例属性没有强制绑定关系。- 赋值语句左边的
self.name是真正绑定到实例上的实例属性,这里的self就代指你刚创建出来的那个实例对象,只有给self绑定了对应属性,后续你才能通过实例访问到这个值,比如你执行d = Details("张三", 22)之后,调用d.name能拿到结果,靠的就是这里的绑定操作。 - 赋值语句右边的
name就是前面定义的局部入参,作用就是把外部传入的临时值,赋值给实例属性长期存储。等__init__方法执行完,局部入参就会被销毁,只有实例上的属性会一直保留。
内容的提问来源于stack exchange,提问作者Deborah
相关产品推荐
相关产品推荐

