封装
创建一个实例对象后,事先定义在类的函数就成为该实例对象的函数即方法,事先定义在类中绑定在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()
执行结果
如上,外界只需要给出参数创建实例对象,并调用方法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}')
执行结果
如上,直接通过调用实例变量的方式获得或者修改了属性数据
事实上,python并没有采取明确的措施来禁止我们这样做,只是封装思想史面向对象编程的思想之下,我们最好还是用封装的思想来访问数据
举个例子,如果我get_name中在print之前还有其他逻辑代码,如调用其他函数或者把name变为大写,这样在外部直接访问属性的话,得出的数据就是天差地别了
要让方法或者属性不被外面直接访问,可以在其名称前面以两个下划线打头,这样就变成一个私有方法或属性,如下
但其实加了双下划线后也还是有办法从外部访问,只要知道了解python处理规则即可,python对以双
下划线开头的名称都进行了转换,即在开头加一个下划线和类名,如上面例子从外部访问就是
s1._Student__name
还有一种是以一个下划线打头的属性或者方法,它的意思是,尽管它可以从外部直接访问,但请不要这样做,请把它看作是私有的
总之python没有明确的具体措施来禁止我们从外部直接访问,只是通过下划线开头来提示你别这样干
注意还有一种以双下划线开头又以双下划线结尾的变量或方法,这是特殊变量或者方法的意思,不是私有的意思,和前面说的单或双下划线开头是不同的
标签:封装,下划线,python,self,实例,方法,隐藏,s1,name From: https://www.cnblogs.com/MyRecords/p/17814550.html