Python类成员之成员修饰符

Python中的成员修饰符比Java中少了2个。只有公有和私有两种

Python Version: 3.5+

成员修饰符是用来设置字段、方法和属性的。默认情况下,成员是公有的

公有

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class C:
def __init__(self, name):
self.name = name

def func(self):
print(self.name) # 在类的内部进行访问

c = C("ps")
print(c.name) # 在类的外部进行访问
c.func()

------------
ps
ps

像以上代码那样,字段从类的内部和外部都可以访问的情况,成员修饰符就是公有的

私有

在类中的成员名前面加上两个下划线__,就可以将该成员的属性设置为私有。私有的成员只有从类的内部访问的权限,出了该类的内部,其他任何地方都不允许访问,包括该类的派生类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class C:
def __init__(self, name):
self.__name = name

def func(self):
print(self.__name) # 在类的内部进行访问

c = C("ps")
print(c.__name) # 在类的外部进行访问

------------
Traceback (most recent call last):
File "/Users/lvrui/PycharmProjects/untitled/8/c5.py", line 9, in <module>
print(c.name) # 在类的外部进行访问
AttributeError: 'C' object has no attribute 'name'
1
2
3
4
5
6
7
8
9
10
11
12
class C:
def __init__(self, name):
self.__name = name

def func(self):
print(self.__name) # 在类的内部进行访问

c = C("ps")
c.func() # 只能通过该方法,从类的内部进行访问

------------
ps

Python访问私有成员的后门

1
2
3
4
5
6
7
8
9
10
class C:
def __init__(self, name):
self.__name = name

def func(self):
print(self.__name) # 在类的内部进行访问

c = C("ps")
# print(c.__name) # 在类的外部进行访问
print(c._C__name)

通过_类名__成员名这样的语法格式来强制访问类中的私有成员