python中类的封装--详解类中的私有变量、私有方法和静态属性

本文介绍了Python中类的封装,通过在变量或方法前加`__`实现私有化。私有变量无法直接在类外访问,但可通过`_类名__变量名`的方式调用。私有方法同样遵循此规则。此外,还讨论了私有静态属性的使用。封装有助于保护关键参数,防止外部直接操作。

当程序完成的时候,有些数据和代码我们就不希望别人调用或者查看的时候,可以对程序进行封装,在python中主要就是进行变量或者方法的私有化。
我们可以在变量或者方法前面加上__,两个下划线来进行私有化,使其变成私有变量或者私有方法,这样在外部就不可以直接调用了,类中私有化的内容由3个,分别是
1)私有化变量
2)私有化方法
3)静态变量
1.先说下私有化变量,比如下面的代码

class Person:
    def __init__(self,name):
        self.name=name
man=Person('wk')
print(man.name) 

结果如下 :
wk
上面的例子我们定义了一个简单的类,实例化之后调用name属性,是可以看到的。但如果我们把name改为__name,以前的方法就无法调用了。比如:

class Person:
    def __init__(self,name):
        self.__name=name
man=Person('wk')
print(man.name)

结果会发生以下的错误

通过正常调用的方法,我们确实无法获得name的变量,但并非完全不可以获得,我们可以把最后的调用代码改为:

print(man._Person__name)

这样的调用结果就是正确的,所以,当我们在类中将变量私有化之后,总结如下:
1)类中的变量不可以在类之外用之前的方法调用
2)当需要在外部调用时,需要采用 _类名__变量名 的格式调用
3)类中变量私有化并非真的不可在外部调用,而是换了新的表达方式

2.当我们在类中的方法名前增加__,我们同样无法在类的外部直接调用,而要按照 _类名__变量名 的格式调用

class Person:
    def __init__(self,name):
        self.name=name
    def __walk(self,speed):
        return speed
man=Person('wk')
s=man._Person__walk(10)
print(s)

在内部调用时,则遵循与前面同样的原则,比如:

class Person:
    def __init__(self,name):
        self.__name=name
    def __walk(self,speed):
        str=speed+self.__name
        return str
man=Person('wk')
s=man._Person__walk('10')
print(s)

我们在walk方法中调用name变量,就必须通过self.__name表达方式进行,否则程序会报错

3.私有静态属性。同前面是一样,比如我们定义了__key=‘aaa’,我们这类之外就无法直接调用查看key参数了,内部是使用时,也要按照self.__key的方式,否则也会报错,比如:

class Person:
    __key='aaa'
    def __init__(self,name):
        self.__name=name
    def __walk(self,speed):
        str=speed+self.__name+self.__key
        return str
man=Person('wk')
s=man._Person__walk('10')
print(s)

简单总结下:
1.类中定义私有变量、方法或者静态属性,可按照在名字前增加双下滑线的方式进行
2.定义后,在类的外部无法直接调用,需要使用_类名__变量名的格式调用。
3.可以应用在类的封装中,屏蔽某些关键参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

努力学python的设计师

一年后再回首,为自己的成长惊喜

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

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

打赏作者

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

抵扣说明:

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

余额充值