self 居然可以起到绑定

目录

一、绑定

二、访问属性的顺序:

 三、总结


一、绑定

我们都知道一个类的实例对象有很多,我们可以通过一个类生成许多不同的实例对象,一个实例对象的属性不但可以通过简单的 “实例对象.要添加的属性”这种方式给实例对象添加属性,也可以通过一些方法,比如我下面介绍的这种方法,这样就可以将要添加的属性添加到不同的实例对象之中。这里面起到关键作用的就是self,起到了绑定的作用。下面我将举个例子。

class A:
    def set_self(self,y):
        self.x=y
a=A()
a.set_self(4)
print(a.x)

此时的输出结果就是:4

但是如果将方法中的self去掉的话,那么就不将属性绑定上去,如下例子:

class A:
    def hello(self,y):
        x=y
a=A()
a.hello(4)
print(a.x)

这样就会出现错误,会显示说明a里面没有x,这也就是绑定错误的问题,这时x=y是指在局部对x进行的赋值,与类和对象的属性是没有关系的。

AttributeError: 'A' object has no attribute 'x'

 此时我们可以通过c.__dict__查看实例对象里面的属性,去验证。

二、访问属性的顺序:

当访问实例对象里面的属性时,先在实例对象里面查找,实例对象里面没有的属性,python会在其生成类里面查找,生成类里面没有的,会在父类里面查找,python会一层一层往上查找,直到找到为止。

class A:
    def hello(self,y):
        self.x=y
a=A()
a.hello(4)
print(a.x)
A.x=233
print(a.x)

其输出的结果为:

4
4

通过这段代码我们就可以发现:访问的时候就会优先考虑其实例对象本身,而不是类。

 三、总结

绑定了的属性(给类里面的属性加self),这样就是在使用该方法添加属性时就会绑定到实例对象。而如果没有类里面的属性加self,这样就会使得这样的属性只是一个局部变量。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值