Uh oh!
There was an error while loading. Please reload this page.
forked from SergioJune/python_test
- Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathtest17.py
More file actions
Latest commit
88 lines (70 loc) · 2.73 KB
/
Copy pathtest17.py
File metadata and controls
88 lines (70 loc) · 2.73 KB
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'练习面向对象的访问限制'
__author__='sergiojune'
# 定义实例
classStudent(object):
def__init__(self, name, score):
# 前面带了两个下划线表示对变量进行私有化,让外部不可以随意访问和修改
# 但这个只是意识上私有而已,因为在外部我们可以通过 _类名__变量名 来访问,但不建议这样做,因为不同版本名字或许不一样
# 所以私有了,一切靠自觉
self.__name=name
self.__score=score
defget_grade(self):
print('my name is %s,my grade is %d'% (self.__name,self.__score))
# 当外界需要获取时,可以单独写一个方法来获取和设置
# 这样做的好处就是使用户不能随意修改,因为是方法,所以可以实现一些逻辑判断
defget_name(self):
returnself.__name
defget_score(self):
returnself.__score
defset_name(self,name):
ifisinstance(name,str):
self.__name=name
else:
raiseValueError('请输入正确名字')
defset_score(self,score):
ifisinstance(score,int):
self.__score=score
else:
raiseValueError('请输入正确的成绩')
# 实例化
bart=Student('Bart', 89)
bart.get_grade()
print(bart.get_name())
bart.set_score(56)
print(bart.get_score())
# 这样访问私有变量,显然正确,但不推荐这样做
print(bart._Student__name)
# 但是你这样设置变量就错了
bart.__name='new name'# 这样做只是给这个实例添加了__name 的属性,并不是修改了私有变量
print(bart.get_name()) # 可以看出这个名字还是不变
# 作业:把下面的Student对象的gender字段对外隐藏起来,用get_gender()和set_gender()代替,并检查参数有效性
classStudentA(object):
def__init__(self, name, gender):
self.__name=name
self.__gender=gender
defget_name(self):
returnself.__name
defget_gender(self):
returnself.__gender
defset_name(self,name):
ifisinstance(name, str):
self.__name=name
else:
raiseValueError('请输入字符串的名字')
defset_gender(self,gender):
ifisinstance(gender, str):
self.__gender=gender
else:
raiseValueError('请输入正确性别')
# 检验是否正确
bart=StudentA('Bart', 'male')
ifbart.get_gender() !='male':
print('测试失败!')
else:
bart.set_gender('female')
ifbart.get_gender() !='female':
print('测试失败!')
else:
print('测试成功!')