Python基础6--类2(实例属性的赋值、修改与访问限制)

目录

 一、实例属性的使用

二、属性值的修改

三、访问限制


        属性是通过__int__函数定义,并通过self传递给实例的一种数据类型,属性一般在__int__函数中。

 一、实例属性的使用

1、在__int__里直接初始化

可以直接给属性赋初值a=0  b=1

class Atom():       #定义一个Atom类
    def __init__(self):   
        self.a = 0   #定义属性a的值为0
        self.b = 1   #定义属性b的值为1
A1 = Atom()    #把类Atom()实例化为A1
print(A1.a)    #打印属性a的值 为0
print(A1.b)    #打印属性b的值 为1

2、传递参数初始化

class Atom():    #定义一个Atom类
    def __init__(self,a,b):     #在__int__里建立传递参数a,b
        self.a = a   #定义属性a 
        self.b = b   #定义属性b
A1 = Atom(0,1)    #把类Atom()实例化为A1,并且对类赋初值
print(A1.a)       #打印属性a的值 为0
print(A1.b)       #打印属性b的值 为1

二、属性值的修改

1、可以直接对属性值修改

给属性赋初值后,可以后续通过直接赋值改变属性实例中的值

class Atom():       #定义一个Atom类
    def __init__(self):   
        self.a = 0   #定义属性a的值为0
        self.b = 1   #定义属性b的值为1
A1 = Atom()    #把类Atom()实例化为A1
print(A1.a)    #打印属性a的值 为0
print(A1.b)    #打印属性b的值 为1
A1.a = 10      #在实例中修改a的值为10
print(A1.a)    #打印的结果为 10
print(Test().a)  #打印结果为 0  再实例中改变属性的值,不会影响到类

2、通过方法对属性值进行修改

定义好初值后,可以通过实例中的方法再去改变原来的值

class Atom():       #定义一个Atom类
    def __init__(self):
        self.a = 0   #定义属性a的值为0
        self.b = 1   #定义属性b的值为1
    def change(self,a1):   #定义一个change的方法
        self.a=a1   #定义属性a1的值
A1 = Atom()    #把类Atom()实例化为A1
print(A1.a)    #打印属性a的值 为0
A1.change(4)   #给方法change中的a1赋值为4,然后a1在对a赋值为4
print(A1.a)    #此时打印的a的值就是4

三、访问限制

        为了代码的健壮性,如果我们不想在外部访问内部的属性的值应该怎么操作? 在上面的例子中,可以直接或者通过方法对属性值进行修改,但是如果我不想让参数被修改,我可以把对应的方法去掉,但是应该怎么避免直接对属性值修改的这种操作呢?

        这时候就可以在属性的名称前加上两个下划线__,这样就可以让内部属性不被外部访问,在Python中,实例的变量名如果以__开头,就变成了一个私有变量,只有内部可以访问,外部不能访问。(不包括以双下划线开头和双下划线结尾的属性,如__a__这个算是特殊变量不算是私有变量)

class Atom():       #定义一个Atom类
    def __init__(self,a):
        self.__a = a   #定义属性a的值为0
    def test(self):    #定义一个方法test
        print(self.__a)  #输出a的值

A1 = Atom(1)    #把类Atom()实例化为A1,并对a赋值为1
print(A1.a)     #打印a的值  结果为:AttributeError: 'Atom' object has no attribute 'a'
print(A1.__a)   #打印__a的值   结果为:AttributeError: 'Atom' object has no attribute '__a'
A1.__a = 10       #给A1.__a赋值为10
print(A1.__a)     #此时我们打印A1.a的值发现打印结果为10,并且代码没有报错了  但是这个10真的修改了实例里面的a吗?
A1.test()       #打印的结果为 1  从这就可以发现A1.__a的10并没有赋值到实例的__a上 因为实际上A1.__a的变量和内部的__a不是一个变量,内部的__a已经被定义成了_Atom__a
A1._Atom__a = 10  #此时尝试下修改 A1._Atom__a的值为10
A1.test()     #打印结果为10,这时候才是赋值成了10

  下图为公众号二维码,内容会同步发出,大家可以关注一起学习

                                                                                               

这个是张狗子小哥哥的公众号,会分享一些平时的工作心得,可以关注看下。

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                                                        

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘阿童木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值