
权限控制
class Student():
#首尾双下划线
def __init__(self,name,age,gender):
self._name=name #self._name受保护的,只能本类和子类访问
self.__age=age #self.__age表示私有的。只有类本身能法访问
self.gender=gender #普通的实例属性
def _fun1(self): #受保护的
print('本类和子类可以访问')
def __fun2(self): #私有的
print('只有定义的类可以访问')
def show(self): #普通的实例属性
self._fun1() #类本身访问受保护方法
self.__fun2() #类本身访问私有方法
print(self._name)
print(self.__age)
#创建一个学生类的对象
stu=Student('cmm',20,'nv')
#类的外部
print(stu._name)
#print(stu.__age) #AttributeError: 'Student' object has no attribute '__age'
#调用受保护的实例方法
stu._fun1()
#stu.__fun2() #AttributeError: 'Student' object has no attribute '__fun2'
#私有的实例属性和方法是真的不能调用吗
print(stu._Student__age)
stu._Student__fun2()
#为什么可以这么访问
print(dir(stu))
输出
cmm
本类和子类可以访问
20
只有定义的类可以访问
['_Student__age', '_Student__fun2', 'class', 'delattr', 'dict', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'getstate', 'gt', 'hash', 'init', 'init_subclass', 'le', 'lt', 'module', 'ne', 'new', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', 'subclasshook', 'weakref', '_fun1', '_name', 'gender', 'show']

(仅供参考)
Comments NOTHING