类的成员,是类的数据成员和类的方法的统称。为了控制对类的成员的访问权限,类的成员分:公有、保护 、私有三种类型。
一、公有成员
任何时候都可以访问的成员即为公有成员,在定义类的公有成员时没有什么特殊的要求。
二、保护成员
名称以一条下划线“_”开头的成员为保护成员。例如:_x、_fun()。保护成员一般都是可以访问的,只是不能用“from module import * ”语句把其它模块定义的保护成员导入到当前模块。
三、私有成员
名称以两条下划线“__”开头的成员为私有成员。例如:__x、__fun()。私有成员一般不能在类的定义语句外访问。不过,通过“类名._类名私有成员名”(类名和私有成员名之间不要有没有任何的分隔符)或“对象名._类名私有成员名”这样的特殊方式仍然可以访问。例如:
例一:
class Mycls01:
x = 1 # 公有成员
_y = 2 # 保护成员
__z = 3 # 私有成员
# 通过类名访问:
print(Mycls01.x) # 公有成员能访问:1
print(Mycls01._y) # 保护成员也能访问:2
print(Mycls01._Mycls01__z) # 私有成员通过“类名._类名私有成员名”的方式可以访问:3
print(Mycls01.__z) # 私有成员不能直接用类名访问:AttributeError: type object 'Mycls01' has no attribute '__z'
# 通过对象名访问:
obj01 = Mycls01()
print(obj01.x) # 公有成员能访问:1
print(obj01._y) # 保护成员也能访问:2
print(obj01._Mycls01__z) # 私有成员通过“对象名._类名私有成员名”的方式可以访问:3
print(obj01.__z) # 私有成员不能直接用对象名访问:AttributeError: 'Mycls01' object has no attribute '__z'
例二:
class Mycls02:
def __init__(self):
self.a = 7 # 公有成员
self._b = 8 # 保护成员
self.__c = 9 # 私有成员
obj02 = Mycls02()
print(obj02.a) # 公有成员能访问:7
print(obj02._b) # 保护成员也能访问:8
print(obj02._Mycls02__c) # 私有成员通过“对象名._类名私有成员名”的方式可以访问:9
print(obj02.__c) # 私有成员不能直接用对象名访问:AttributeError: 'Mycls02' object has no attribute '__c'
———————————————— 本篇完 ————————————————
看完之后,麻烦您顺手点击下方 “点赞” 两个字给我点个赞吧 ^-^ , 谢谢您了。
如果您还能像我小学一年级班主任好老师那样,给我随心写上几句表扬或批评的话语,那真是感激不尽!
在我人生的道路上,有了您的鼓励和指导,我一定成长快快。