每天一点python——day94

news/2024/9/18 5:53:01
#每天一点Python——94
#面向对象的三大特征——封装
'''
封装:隐藏内部细节,对外提供操作方式。【提高程序的安全性】
继承:在函数调用时,使用’形参名称=值‘的方式进行传参,传递参数的顺序可以与定义时参数顺序不同【提高程序的复用性】
多态:在函数定义时,直接对形式参数进行赋值。在调用时,如果该参数不传值,将使用默认值,如果该参数传值,则使用传递的值【提高程序的拓展性和可维护性】
三大特征与语言本身没有关系,不管你是c或者java都一样,这只是一种编程思想,而我们现在就是在学Python,所以接触Python方面比较多。
'''
#封装:
'''
类似于银行用的ATM机,你根本不清楚内部结构,但是你只要会如何使用就可以了。至于内部细节如何使用,就不用管了。
其目的就是保证数据的安全性。
'''
#封装的实现
'''
封装:将数据(属性)和行为(方法)包装在类对象中。在方法内部对属性进行操作,在类对象的外部调用方法。
这样,就不用关心方法内部具体的实现了,从而隔离了复杂度。
'''
#封装的实现:
class Car():
    def __init__(self,pingpai):
        self.pingpai=pingpai
    def qidong(self):
        print('汽车已经启动')

#以上就是一个创建好的类了,
#我们现在创建一个对象
car=Car('汽车')
car.qidong()
print(car.pingpai)
'''
输出结果如下:
汽车已经启动
汽车
这就是封装好一个类后的使用。
'''

封装示意图:

 

点击图中所示位置,就会看到我们创建的类就已经像一个包一样,封装好了。提高了方便

#封装好一个类后,肯定设计到一些权限的使用
#就像一个应用软件,有面向用户和面向操作人员的,要使用就得开通权限,这样就产生了权限控制
'''
权限控制:是通过对属性、方法添加单下划线、双下划线以及首尾双下划线来实现的。
各个下划线的区别:
①单下划线开头:
以单下划线开头的属性或方法表示(protected)受保护的成员,这类成员被视为仅供内部使用,允许类本身和子类进行访问,但实际上它可以被外部代码访问。
②双下划线开头:
表示(private)私有的成员,这类成员只允许定义该属性或方法的类本身进行访问。
③首尾双下划线:
一般表示特殊的方法
'''
#例:权限控制
class Student:
    #首尾双下划线
    def __init__(self,name,age,xingbie):#方法的形参,也就是局部变量
        self._name=name#受保护的单下划线开头,只能本类和子类访问
        self.__age=age#私有的双下划线开头,智能类本身去访问
        self.xingbie=xingbie#普通的实例属性,类的内部,外部以及子类都可以访问【访问权限最大】
    def _fun(self):#定义一个方法,加了一个下划线说明它是受保护的
        print('子类以及它本身可以使用')
    def __fun2(self):#定义一个私有的方法
        print('只有定义的类可以访问')
    def pu(self):#定义一个普通的实例方法
        self._fun()#类本身访问受保护的方法
        self.__fun2()#类本身去访问私有的方法
        print(self._name)#受保护的实例属性
        print(self.__age)#私有的实例属性
#以上就是我们创建出来的类的结构。
#接下来创建一个对象
stu=Student(name='阿四',age=20,xingbie='男')#因为我们初始化方法里面有三个参数,所以我们创建的对象也需要三个参数
#现在我们在类的外部,在类的外部访问受保护的实例属性stu._name
print(stu._name)
#输出:阿四
#然后我们再访问一下类的私有属性stu.__age
'''
print(stu.__age)
输出结果:
'Student' object has no attribute '__age'
会报错。会显示没有这个属性。
这里就疑惑了,我明明定义了这个呀
这是因为私有属性出了类的定义范围,就不能使用了
'''
#访问受保护的示例方法
stu._fun()
#输出:子类以及它本身可以使用
'''
访问私有方法
stu.__fun2()
输出:'Student' object has no attribute '__fun2'
报错,也是没有这个方法,说明也是超过访问了,不允许访问
'''

#私有的实例属性和方法是真的不能访问吗?
'''
可以访问,只是他的访问多了一个形式,要求使用对象名字
如下:
'''
print(stu._Student__age)

stu._Student__fun2()
#为什么可以访问?
#dir()函数可以展示对象中所有的属性和方法。
print(dir(stu))
#输出如下
'''
['_Student__age', '_Student__fun2', '__class__', '__delattr__', 
'__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
 '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', 
 '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', 
 '__str__', '__subclasshook__', '__weakref__', '_fun', '_name', 'pu', 'xingbie']
 以上就是这个对象所有的属性和方法了
 在里面可以看到我们私有的age在里面定义为_Student__age
 所以我们访问它时,也需要使用这种形式。
 fun2方法在里面是_Student__fun2
 所以我们调用时也需要对象名打点调用_Student__fun2才可以。
 以上就是权限的控制。
'''

 


http://lihuaxi.xjx100.cn/news/1892384.html

相关文章

代码随想录第三十二天(一刷C语言)|单调递增的数字

创作目的:为了方便自己后续复习重点,以及养成写博客的习惯。 一、单调递增的数字 思路:参考carl文档 当strNum[i - 1] > strNum[i](非单调递增),先让strNum[i - 1]--,再strNum[i]9。再确定…

再回首感知损失在low-level上的应用

《Perceptual Losses for Real-Time Style Transfer and Super-Resolution》是李飞飞团队在2016年发表于ECCV的文章。我近几年的工作中,所训练的模型都离不开感知损失。不得不感慨,大佬之所以是大佬,就是因为他们开创性的工作很多年后依然为人…

通俗理解什么是 LSTM 神经网络

大家好啊,我是董董灿。 刚开始做程序开发时,在公司提交代码前,都需要让大佬们 review(评审),大佬们看完,总会在评论区打出一串"LGTM"。 当时作为小白的我,天真地以为大佬觉得我提交的代码还不错…

仿交易猫转转闲鱼链接三合一源码+独立后台生成链接

高仿交易猫转转闲鱼源码 搭建教程:添加网站→上传源码→解压源码→导入数据库→修改数据库路径config/Conn.php 不用设置什么伪静态 不会可以看源码里有教程 下载程序:https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

都是植物补光,为什么你的没效果?

冬季来临,很多种植新手选择植物补光灯时,往往觉得功率越高,补光效果越好。但还是出现叶子泛黄、徒长的问题,问题究竟出在哪里? 在探究问题所在之前,我们先简单梳理一下植物与光照的关系。 大家都知道万物生…

zabbix简单介绍2

学习目标: 能够实现一个web页面的监测能够实现自动发现远程linux主机能够通过动作在发现主机后自动添加主机并链接模板能够创建一个模版并添加相应的元素(监控项,图形,触发器等)能够将主机或模板的配置实现导出和导入能够实现至少一种报警方式(邮件,微信等)能够通过zabbix_pro…

多架构容器镜像构建实战

最近在一个国产化项目中遇到了这样一个场景,在同一个 Kubernetes 集群中的节点是混合架构的,也就是说,其中某些节点的 CPU 架构是 x86 的,而另一些节点是 ARM 的。为了让我们的镜像在这样的环境下运行,一种最简单的做法…

Java入门学习笔记二

一、抽象类 当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的行为方式,那么这些方法都有具体的方法体。 分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是功…