一、1. 为了保证类变量数据的安全,如何做才可以不能通过对象访问类变量任意去访问或者直接修改
2. 成员的可见性
3. 公共的 pubic 私有的 private(python没有这两个关键字)
4. python中在方法前写__(两个下划线)-------代表私有方法
二、1.Python里的私有表示和公共表示:
代码区:
class Student():
name = ""
age = 0
# 统计当前班级人数
sum = 0
def __init__(self, name, age):
self.name = name
self.age = age
self.score = 0
# self.__class__.sum += 1
# print("当前的班级的人数为:" + str(self.__class__.sum))
def marking(self, score):
if score < 0:
return "输入成绩有误请重新输入"
self.score = score
print(self.name + "同学的本次考试成绩为:" + str(self.score))
def do_English_Homework(self):
print("do English homework")
# 实例方法
def do_homework(self):
# 在内部调用方法
self.do_English_Homework()
print("do your homework")
# 类方法
@classmethod
def plus_sum(cls):
cls.sum += 1
print(cls.sum)
student1 = Student("菲神", 19)
student1.marking(99)
运行结果:
分析:
拿学生类里面的making方法来讲如果这个方法不想被在类外访问那么如何做呢? 修改代码如下:
# 修改代码:
def __marking(self, score):
if score < 0:
return "输入成绩有误请重新输入"
self.score = score
print(self.name + "同学的本次考试成绩为:" + str(self.score))
运行结果:很明显通过执行结果来看无法访问making方法
那么如何定义私有方法你会了吗?
三、原始代码:
class Student():
def __init__(self, name, age):
self.__score = 0
def marking(self, score):
if score < 0:
return "输入成绩有误请重新输入"
self.__score = score
print(self.name + "同学的本次考试成绩为:" + str(self.__score))
student1 = Student("菲神", 19)
student1.__score = -1
print(students1.__score)
运行结果:
问题:为什么在类的外部对一个私有的成员变量赋值,程序不会报错呢?
问题解释:由于Python语言的动态特性,也就是说你student1.__score的时候Python自动认为你新建了一个变量比赋值为-1,并 不是说实例方法里的私有变量没有生效。为了更具有束缚力
验证解释:通过输出他们的信息:__dict__方法
部分代码:
#在类外的code
student1 = Student("菲神", 19)
student1.marking(99)
student2 = Student("詹姆斯", 20)
student1.__score = -1
print(student1.__dict__)
print(student2.__dict__)
运行结果:
运行结果解析:从执行结果来看以及student1和student2二者的对比很明显可以找到你想要的答案,其中_Student__score实际上就是making方法私有变量self.__score,同时还验证了__score真的是Python认为你那是创建的一个新的变量
那么我们到底该如何访问私有变量呢?
参考上面的运行结果字典有一个_Student__score的一个元素
print(student2._Student__score)
执行结果: