python基础 类(二) 类的封装与属性隐藏

封装

创建一个实例对象后,事先定义在类的函数就成为该实例对象的函数即方法,事先定义在类中绑定在self上的变量成为该实例对象的数据,各个实例对象的方法和数据是互相独立的,互干扰影响

类的实例对象可以调用函数即方法,这样通过方法来访问或者修改属于该实例对象的数据,就是所谓的封装,把数据(属性)包裹在方法里面,而不是直接暴露给外界

外界的我们为您我们只需要知道调用该方法就能修改或访问我们想要的数据,而不需要知道方法的具体实现细节,方法里面到底是怎样实现的

class Student:

    def __init__(self, name):
        self.name = name
	def get_name(self):
        print(f'students name is : {self.name}')

s1 = Student('a')
s1.get_name()
s2 = Student('b')
s2.get_name()

执行结果
image

如上,外界只需要给出参数创建实例对象,并调用方法get_name就能得到打印出name数据,至于具体是如何打印出来的,外界不需要知道

属性隐藏

从上面封装的思想来看,要想访问或者修改属性是要通过调用方法的,看看这个例子

class Student:

    def __init__(self, name):
        self.name = name
    def get_name(self):
        print(f'students name is :{self.name}')

s1 = Student('a')
print(f'name: {s1.name}')
s1.name = 'a2'
print(f'name: {s1.name}')

执行结果
image
如上,直接通过调用实例变量的方式获得或者修改了属性数据

事实上,python并没有采取明确的措施来禁止我们这样做,只是封装思想史面向对象编程的思想之下,我们最好还是用封装的思想来访问数据
举个例子,如果我get_name中在print之前还有其他逻辑代码,如调用其他函数或者把name变为大写,这样在外部直接访问属性的话,得出的数据就是天差地别了

要让方法或者属性不被外面直接访问,可以在其名称前面以两个下划线打头,这样就变成一个私有方法或属性,如下
image

但其实加了双下划线后也还是有办法从外部访问,只要知道了解python处理规则即可,python对以双
下划线开头的名称都进行了转换,即在开头加一个下划线和类名,如上面例子从外部访问就是

s1._Student__name

还有一种是以一个下划线打头的属性或者方法,它的意思是,尽管它可以从外部直接访问,但请不要这样做,请把它看作是私有的

总之python没有明确的具体措施来禁止我们从外部直接访问,只是通过下划线开头来提示你别这样干

注意还有一种以双下划线开头又以双下划线结尾的变量或方法,这是特殊变量或者方法的意思,不是私有的意思,和前面说的单或双下划线开头是不同的

posted @   工作手记  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示