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.可以应用在类的封装中,屏蔽某些关键参数

发布了13 篇原创文章 · 获赞 1 · 访问量 192

猜你喜欢

转载自blog.csdn.net/aa12551827/article/details/104858317
今日推荐