Python类中的成员可见性

Python类中的成员可见性

成员的可见性在其他语言中也都有体现,
Python也不例外的提供了类似的功能,
但是Python与其他语言稍有不同,这里做一下记录
Python设置 成员变量和方法 为私有的为
私有的方式为 在变量名之前加两个下划线__
但是被设为私有属性的成员还是方法都可以在类的外部强制调用,
可以看下面这个例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author : Anthony_Duan
# @Time : 30/06/2018 12:24
# @File : classtest.py
# @Software: PyCharm

class Student:
def __init__(self,name,age,score):
self.name = name
self.__age = age
self.__score = score
self.__re_set_score(0)

def get_age(self):
return self.__age

def __re_set_score(self, score):
self.__score = score
return self.__score

if __name__ == '__main__':

stu = Student("anthony",20,80)
print(stu.name) # anthony
print(stu.get_age()) # 20
# print(stu.__age)
print(stu.__dict__) #{'name': 'anthony', '_Student__age': 20, '_Student__score': 0}

print(stu._Student__age) # 20
print(dir(stu)) #['_Student__age', '_Student__re_set_score', '_Student__score', 'get_age', 'name']
print(stu._Student__re_set_score(30)) # 30

通过 stu.__dict__dir(stu)这两个内置的函数可以查看到stu对象的所有数据成员和方法,
可以看到,被修饰为私有的成员的名字已经被改变,
改变的规则是 _+类名+原本的私有名。
例如原本的__age变成了_Student__age。在外部用变更后的名字依旧可以访问私有的数据成员或者私有方法。
可见Python的成员可见性就是通过改变原名字而起到保护性。

-------------End Of This ArticleThank You For Reading-------------