基础介绍
概念:
保护数据隐私,授权才能访问,类中的变量和方法以__开头命名,则使其变为私有,私有的变量和方法仅能在类的内部使用,类的外部无法调用,只能通过公共方法对其进行处理
示例代码:
class Clerk:
name = None
__job = None
__salary = None
def __init__(self, name, job, salary):
self.name = name
self.__job = job
self.__salary = salary
def set_job(self, job):
self.__job = job
def get_job(self):
return self.__job
def set_salary(self, salary):
self.__salary = salary
def get_salary(self):
return self.__salary
c1 = Clerk('tom', 'python工程师', 20000)
print(c1.name)
print(c1.__job)
print(c1.__salary)
name可以直接访问,但是job和salary由于是私有变量无法直接访问,所以在类的内部提供了对其操作的公共方法set和get方法
运行下方代码:
print(c1.name, c1.get_job(), c1.get_salary())
c1.set_job('java工程师')
c1.set_salary(25000)
print(c1.name, c1.get_job(), c1.get_salary())
修改成功了,以上是私有成员中的属性,私有方法类似
在类中定义了私有方法hi,直接调用报错,程序找不到这个方法
因此,需要提供公共方法
注意事项与细节
类的动态特性,会出现伪私有属性情况
class Clerk:
name = None
__job = None
__salary = None
def __init__(self, name, job, salary):
self.name = name
self.__job = job
self.__salary = salary
def get_job(self):
return self.__job
c1 = Clerk('tom', 'python工程师', 20000)
c1.__job = 'Go工程师'
print(c1.__job)
print(c1.get_job())
运行:
这是为啥呢?c1.__job让python认为你动态创建了一个__job的公共属性和私有属性不是同一个,我们可以debug一下,看下创建的对象
这里的才是真正的私有属性全称,单步执行一下
出现了一个__job,这个属性是后面动态创建的