封装:广义上的面向对象封装。代码的保护。面向对象的思想本身就是一种封装,只让自己的对象能调用自己类中的方法。
狭义的封装概念:面向对象的三大特性之一:让属性和方法都藏起来,不让你看见。
例1:
class Person:
def __init__(self, name, passwd):
self.name = name
self.__passwd = passwd
chang = Person('chang', '123456')
print(chang.name)
print(chang.passwd)
结果:
在前面加了两个下划线,这个passwd已经变成了私有属性。
class Person:
def __init__(self, name, passwd):
self.name = name
self.__passwd = passwd # 私有属性
chang = Person('chang', '123456')
print(chang.name)
# print(chang.passwd)
print(chang.__dict__) #
print(chang._Person__passwd)
我们工作中是不能这么用的。
只能在代码级别变成了私有。
class Person:
def __init__(self, name, passwd):
self.name = name
self.__passwd = passwd # 私有属性
def get_pwd(self):
return self.__passwd # 只要在类的内部使用私有属性,就会自动带上一个_类名
chang = Person('chang', '123456')
print(chang.get_pwd())
所有的私有,都是在变量的左边加上双下划线;所有的私有的,都不能在类的外部使用。
在类的内部,可以定义类的私有属性、类中的私有方法、类中的静态属性。
这种私有化只是从代码级别做了变形,并没有真的约束。
变形机制_类名__名称, 在类外用这个调用,在类的内部直接__名字调用。