私有化属性以及公有赋值和取值
本帖最后由 paypojie 于 2022-11-13 12:27 编辑类的私有化
前言 封装 定义私有化属性 定义公有 set get 方法
# 先看一组没有私有属性的类
class Student():
def __init__(self,name,age,score):
self.name = name
self.age = age
self.score = score
# 定义一个__str__方法 打印对象名时 自动调用此方法 该方法需要配合return语句 用来返回被打印的值
def __str__(self):
# 必须返回字符串 如果直接返回 self.name,self.age,self.score 会报错
return '%s %s %s' % (self.name,self.age,self.score)
# return '{} {} {}'.format(self.name,self.age,self.score)
# 创建实例对象
s = Student('Emma',18,59)
# 打印对象名时 自动调用__str__方法
print(s)
# 输出s这个对象的score属性
print(s.score)
https://static.52pojie.cn/static/image/hrline/1.gifhttps://static.52pojie.cn/static/image/hrline/1.gif
# 现在 我想让score不可以通过s.score这种形式调用 以及修改
class Student():
def __init__(self,name,age,score):
self.name = name
self.age = age
# 私有化 在变量名前面添加两个下划线就行
self.__score = score
def __str__(self):
return '%s %s %s' % (self.name,self.age,self.__score)
s = Student('Emma',18,59)
print(s)
#去掉下面一行的注释 发现会报错 因为score私有化了 不能被访问 私有化属性只能在类里面访问
# print(s.__score)
# 尝试修改属性
s.__score = 60
# 发现score属性没有被修改
print(s)
https://static.52pojie.cn/static/image/hrline/2.gifhttps://static.52pojie.cn/static/image/hrline/2.gif
# 定义公有set和get
# set为了赋值 get为了取值
class Student():
def __init__(self,name,age,score):
self.name = name
self.age = age
self.__score = score
def __str__(self):
return '%s %s %s' % (self.name,self.age,self.__score)
def setScore(self,score):
self.__score = score
s = Student('xiaoming',18,59)
print(s)
s.setScore(60)
print(s)
https://static.52pojie.cn/static/image/hrline/4.gifhttps://static.52pojie.cn/static/image/hrline/4.gif
class Student():
def __init__(self,name,age,score):
self.name = name
self.age = age
self.__score = score
def __str__(self):
return '%s %s %s' % (self.name,self.age,self.__score)
def getScore(self):
return self.__score
s = Student('xiaoming',18,59)
# 去掉下面一行代码会报错
# print(s.__score)
print(s.getScore())
https://static.52pojie.cn/static/image/hrline/5.gifhttps://static.52pojie.cn/static/image/hrline/5.gifhttps://static.52pojie.cn/static/image/hrline/5.gif
小结
私有化属性 在属性名前面加__属性就变成了私有属性 只能在类里面进行访问 外界是无法访问的
为了不让外界随意访问 定义公有set和get方法 可以允许修改和访问你指定的私有属性
不一定需要用setXxx getXxx 这种形式 这样写 只是为了见名知意
set和get方法里面用if...else 这种条件判断语句 将能够更好的指定访问和修改属性值的范围
最后看张截图 都是最顶级的开源大神 网站链接放在评论区 这里 不知道如何添加链接
本帖最后由 paypojie 于 2022-11-13 12:17 编辑
欢迎各位踊跃发言 发现用md添加链接可以点击跳转https://www.facesofopensource.com/
添加链接没效果 https://www.facesofopensource.com/ 必须支持大佬 学到了哈哈 akillking 发表于 2022-11-13 12:06
必须支持大佬
不是大佬 哈哈{:301_998:} liuhui12138 发表于 2022-11-13 12:11
学到了哈哈
学到了就好 还需要细看 :lol shouerluoli 发表于 2022-11-13 13:34
感谢楼主的分享
试一下这个表情{:1_933:}
页:
[1]