文章目录
-
- 什么是私有函数和私有变量
-
私有函数与私有变量的定义方法
-
Python 中的封装
-
面向对象编程小练习
通过学习私有函数与私有变量,可以更好的完善 类的开发 ,从而丰满我们的场景与实现方案。
私有函数与私有变量中的私有是什么意思? —> 简单理解就是独自拥有、不公开、不分享的意思。放到函数与变量中就是独自拥有的函数与独自拥有的变量,并且不公开。这样我们就理解了什么是私有函数与私有变量。
-
无法被实例化后的对象调用的类中的函数与变量
-
虽然无法被实例化后的对象调用,但是在 类的内部我们可以 调用私有函数与私有变量
-
私有函数与私有变量的目的:只希望类内部的业务调用使用,不希望被实例化对象调用使用
-
既然有私有函数与私有变量,其实能被实例化对象调用的函数与变量就是公有函数与公有变量,不过一般我们都称之为函数与变量。😓
如何定义私有函数与私有变量:在 类变量 与 类函数 前添加 __
(2个下横线)即可定义私有函数与私有变量;变量或函数的后面无需添加,左右都有两个下横线,是 类的内置函数 的定义规范。
私有函数与私有变量示例如下:
class Persion(object):
def init(self):
self.name = name
self.__age = 18 # ‘self.__age’ 为 Persion类 私有变量
def run(self):
print(self.name, self.__age) # 在 Persion类 的代码块中,私有变量依然可以被调用
def __eat(self): # ‘__eat(self)’ 为 Persion类 私有函数
return ‘I want eat some fruits’
接下来我们根据上面的示例代码做一下修改,更好的演示一下 私有函数与私有变量 方便加深理解
class PersionInfo(object):
def init(self, name):
self.name = name
def eat(self):
result = self.__eat()
print(result)
def __eat(self):
return f’{self.name} 最喜欢吃水果是 ‘榴莲’ 和 ‘番石榴’’
def run(self):
result = self.__run()
print(result)
def __run(self):
return f’{self.name} 最喜欢的健身方式是 ‘跑步’ 和 ‘游泳’’
persion = PersionInfo(name=‘Neo’)
persion.eat()
persion.run()
>>> 执行结果如下:
>>> Neo 最喜欢吃水果是 ‘榴莲’ 和 ‘番石榴’
>>> Neo 最喜欢的健身方式是 ‘跑步’ 和 ‘游泳’
我们再试一下 通过 实例化对象 persion
调用 __eat
私有函数试试
class PersionInfo(object):
def init(self, name):
self.name = name
def eat(self):
result = self.__eat()
print(result)
def __eat(self):
return f’{self.name} 最喜欢吃水果是 ‘榴莲’ 和 ‘番石榴’’
def run(self):
result = self.__run()
print(result)
def __run(self):
return f’{self.name} 最喜欢的健身方式是 ‘跑步’ 和 ‘游泳’’
persion = PersionInfo(name=‘Neo’)
persion.__eat()
>>> 执行结果如下:
>>> AttributeError: ‘PersionInfo’ object has no attribute ‘__eat’
>>> 再一次证明 实例化对象是不可以调用私有函数的
那么事实真的是 实例化对象就没有办法调用 私有函数 了么?其实不是的,我们继续往下看
class PersionInfo(object):
def init(self, name):
self.name = name
def eat(self):
result = self.__eat()
print(result)
def __eat(self):
return f’{self.name} 最喜欢吃水果是 ‘榴莲’ 和 ‘番石榴’’
def run(self):
result = self.__run()
print(result)
def __run(self):
return f’{self.name} 最喜欢的健身方式是 ‘跑步’ 和 ‘游泳’’
persion = PersionInfo(name=‘Neo’)
通过 dir() 函数 查看一下 实例化对象 persion 中都有哪些函数?
print(dir(persion))
可以看到 实例化对象 persion
也有两个私有变量 _Persion__eat
和 _Persion__run
,尝试直接用实例化对象 persion
调用私有变量。
class PersionInfo(object):
def init(self, name):
self.name = name
def eat(self):
result = self.__eat()
print(result)
def __eat(self):
return f’{self.name} 最喜欢吃水果是 ‘榴莲’ 和 ‘番石榴’’
def run(self):
result = self.__run()
print(result)
def __run(self):
return f’{self.name} 最喜欢的健身方式是 ‘跑步’ 和 ‘游泳’’
persion = PersionInfo(name=‘Neo’)
通过 dir() 函数 查看一下 实例化对象 persion 中都有哪些函数?
print(dir(persion))
print(persion._PersionInfo__eat())
print(persion._PersionInfo__run())
>>> 执行结果如下图:
可以看到通过这种方式,我们的 实例化对象 persion 也成功的调用了 PersionInfo 类 的私有函数;但是既然是 私有函数 ,那么目的就是不希望被实例化对象调用,所以我们还是按照编码规范来使用比较好。
附:私有变量(私有属性)的使用与私有函数一样,我们看下面的示例
class PersionInfo(object):
__car = ‘BMW’
def init(self, name, sex):
self.name = name
self.__sex = sex
def info(self):
result = self.__info()
print(result)
def __info(self):
return f’{self.name} 性别:{self.__sex} ,他有一辆:‘{self.__car}’’
persion = PersionInfo(name=‘Neo’, sex=‘男’)
persion.info()
>>> 执行结果如下:
>>> Neo 性别:男 ,他有一辆:‘BMW’
>>> 尝试调用私有函数 私有函数与变量(属性)[‘_PersionInfo_01__car’, ‘_PersionInfo_01__info’, ‘_PersionInfo_01__sex’]
print(persion01._PersionInfo_01__info())
>>> 执行结果如下:
>>> Neo 性别:男 ,他有一辆:‘BMW’
其实 Python 中并没有 封装 这个功能,而封装只是针对 Python 中某种业务场景的一种概念而已。
封装的概念 —> 将不对外的私有属性或方法通过可以对外使用的函数而使用(类中定义的私有函数、私有方法只能在类的内部使用,外部无法访问),这样做的主要原因是:保护隐私,明确的区分内与外。
封装的示例如下:
class Persion(object):
def __hello(self, data):
print(‘hello %s’ % data)
def helloworld(self):
self.__hello(‘world’)
if name == ‘main’
persion = Persion()
persion.helloworld()
>>> 执行结果如下:
>>> hello world
>>> 我们可以看到 helloworld() 是基于 私有函数 __hello() 来执行的;
>>> 所以我们是通过对外的函数 helloworld() 调用了内部私有函数 __hello ; 这就是 Python 中的 封装的概念。
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
b70aad5355a2c5eeff0.png)
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!