python中关于类的封装
类的封装中,有教学视频中说,改变某个对象对应的属性名就可以隐藏对象的属性,在通过getter方法调用和setter方法修改名字就可以避免数据的安全性,避免被修改。但是,换一个属性名字并不影响直接对对象的修改啊。。。那以上那些很复杂的一堆函数有什么作用呢?
class Dog:
'''
传说中,改变属性名就可以隐藏属性
'''
def __init__(self,name):
self.hidden_name = name
def say(self):
print('大家好,我是%s'%self.hidden_name)
def get_name(self): # 用getter方法才能调用属性名
return self.hidden_name
def set_name(self,name):
self.hidden_name = name # 用setter方法才能修改属性名
D1 = Dog('xiaohei')
print(D1.get_name())
#但是,我完全可以直接修改啊。。。,例如:
D1 = Dog('xiaobai')
D1.say()
#再或者:
D1.hidden_name = 'xiaobai' 你这不是修改属性值吗?
我话是有点没看懂 大马强 发表于 2022-1-8 10:20
你这不是修改属性值吗?
我话是有点没看懂
教学视频中说,改变一个属性名就可以避免属性值被修改。但是,我修改了属性名后,属性值仍然很容易就被修改了,完全没必要有什么getter方法和setter方法 你这属性名不是一直都是 self.hidden_name 吗?我去看下资料 大马强 发表于 2022-1-8 10:34
你这属性名不是一直都是 self.hidden_name 吗?我去看下资料
普通的,没有修改的名字是self.name = name,视频中说,变为self.hidden_name = name,就可以避免属性值被直接修改 class Dog:
def __init__(self, food) -> None:
self.__food = food
@property
def get_food(self):
return self.__food
dog = Dog('🐟')
print(dog.get_food) self.name = name
self.hidden_name = name
这两个不是都一样吗,哪节课是视频或者是作业,我去看看 大马强 发表于 2022-1-8 10:42
这两个不是都一样吗,哪节课是视频或者是作业,我去看看
https://www.bilibili.com/video/BV1hW41197sB?p=102&spm_id_from=pageDriver ???你也没使用getter setter啊? fledgling 发表于 2022-1-8 10:44
https://www.bilibili.com/video/BV1hW41197sB?p=102&spm_id_from=pageDriver
你看视频的 7分50秒的地方,这只是掩耳盗铃,我看不出那里能藏起来
在上帝视角,你改啥名都没用 hrpzcf 发表于 2022-1-8 10:50
???你也没使用getter setter啊?
用了呀,第9行和第11行
你要看到p103的10分35秒,他讲了一个通过加 __ 来让外部无法访问的方法 fledgling 发表于 2022-1-8 10:57
用了呀,第9行和第11行
这两个是类的默认方法,
你那个是自己定义的,虽然实现的结果是一样 所以说,这个方法根本不能起到隐藏内部变量的作用{:10_245:}
在他的下一个视频,他才会讲到通过加 __ 来让外部无法访问类的属性
页:
[1]