python(22)--面向对象1-封装

python面向对象

  • 1面向过程/面向对象
  • 2面向对象核心概念-类
  • 3类的设计
    • 3.1类三要素-类名、属性、方法
    • 3.2面向对象基础语法
      • 3.2.1查看对象的常用方法
      • 3.2.2类定义
      • 3.2.3创建类对象
      • 3.2.4__init__()方法
      • 3.2.5 self参数
      • 3.2.6类内置方法和属性
        • _del_()方法--销毁对象
        • _str_()方法--定制化输出对象
  • 4面向对象的封装
    • 4.1 身份运算符号 is、is not
    • 4.2 私有属性和私有方法

本系列博文来自学习《Python基础视频教程》笔记整理,视屏教程连接地址:http://yun.itheima.com/course/273.html

1面向过程/面向对象

过程和函数:
过程是一个早期的编程概念,类似于函数,只能执行,没有返回值。
函数不仅能执行,还可以有返回值。

面向过程面向对象:
面向过程:强调怎么做,把完成一个需求的步骤依次完成,根据开发需求,将独立功能封装成一个又一个的函数。
在开发复杂项目,没有固定的功能,开发难度大

面向对象:强调谁来做。根据职责在一个对象中封装更多的方法.
在完成一个需求时,首先确定职责,要明确该职责的对象,最后完成需求只要调用对应的对象就能完成该功能。

面向对象编程的例子–植物大战僵尸:
向日葵:产阳光,摇晃,生命值,主程序要做的就是把向日葵往地上一摆就行了(哈哈哈太搞笑了)
僵尸:啃植物,移动

2面向对象核心概念-类

: 一群具有相同特征或者行为的事物的统称,是抽象的,不能直接使用。类的职责很单一就是为了创建对象用的。

特征被称为属性,
行为被称为方法。

(类:制造飞机使用的图纸,飞机具有什么特征,飞机有什么行为。)

对象:是由类创建的一个具体存在,可以直接使用。在程序开发时应该先有类。

(有了图纸,就可以造真的飞机。)

类和对象的关系:类只有一个,对象可以有很多个,不同对象之间的属性可能不同,(同一张图纸造出来的飞机可能颜色各不相同。)

类中的属性和方法对象中也会有,不会多也不会少。

3类的设计

3.1类三要素-类名、属性、方法

面向对象的开发之前,应该进行需求分析,确定一下,程序中要包含什么类。

设计类时要满足的三个要素
类名: 大驼峰命名,名词提炼法,
属性: 类别的特征
方法: 动词提炼法

例子:
小明今年18岁,身高175,今天早上去跑步,然后去吃饭
小美今年17岁,身高1.65,小美不跑步,小妹喜欢吃东西。

定义:人类:三个属性名字身高年龄,三个方法。

3.2面向对象基础语法

对象无处不在,变量,数据,函数都是对象。

3.2.1查看对象的常用方法

1.ipython中使用.+tab键来确定方法
2.dir(对象)查看的所有方法,带‘__’是内置方法和属性
3.__doc__可以查看函数文档

(ipython 中定义函数,两个回车之后结束定义)

3.2.2类定义

定义一个简单的类(在类中封装方法)

Class 类名:Def 方法名(self,参数列表)#第一个参数一定要是self,如果没有其他参数也要写一个self.

3.2.3创建类对象

接收对象的变量同样是对对象的引用,Tom接受猫类对象,为猫对象分配空间,让tom 指向这个对象

变量名=类名()

1.注:用print输出对象变量,会输出这个变量引用的对象 是由哪一个类创建的对象,以及在内存中的地址(以16进制的形式表示)

2.使用同一个类创建的不同的对象 指向的内存地址不同。就是说,引用不同,对象不同。

3.在类的外部给对象增加属性(这种方式很简单,但是不推荐使用)

对象.属性名=“属性值”

在这里插入图片描述
在这里插入图片描述
在类的外部给对象增加属性会造成的隐患:运行时找到属性可以正常执行,找不到属性就会报错。所以,类的属性应该封装在类定义中。

AttributeError: ‘Cat’ object has no attribute ‘name’

3.2.4__init__()方法

用类名+()创建对象时会做两件事:1.自动为对象分配内存空间;2.调用__init__()方法为对象的属性设置初始值(初始化方法)

对象的初始化方法__init__()专门用来定义类的属性。在初始化方法内部定义属性。在初始化方法__init__()中添加形参,在创建对象时,将属性作为实参传入。不同的对象就有不同的属性值。

self.属性名=属性值

3.2.5 self参数

self 保存着对象的引用。哪一个对象调用的方法,self 就是该对象的引用。利用self在 类封装的方法 中输出对象属性。self .属性名 来访问对象的属性。

对象内部属性和方法的调用都是用 self.属性 或者 self.方法 来实现。

3.2.6类内置方法和属性

一般不需要认为去编写,如果重写了该方法就能实现一些神奇的功能。
在python中方法名如果是__xxxx__()的,那么就有特殊的功能,也叫做“魔法”方法。

del()方法–销毁对象

一个对象要被在内存中销毁,系统会自动调用对象的_del_()方法。生命周期:类名创建对象- del 方法调用结束

str()方法–定制化输出对象

print输出对象变量,默认情况下是输出变量 引用的对象 是由哪一个类创建的,以及在内存中的地址。但是,希望输出自定义的内容,就可以调用_str_()方法。

    def __str__(self):#必须返回一个字符串return "我是小猫[%s]" % self.name

输出对象变量print(tom)时,就不是输出默认内容,而写在_str_方法中的内容。

当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据

参考资料:https://www.runoob.com/note/41154

4面向对象的封装

封装是面向对象编程的一大特点,面向对象编程的第一步–将属性和方法封装到一个抽象的类中,外界使用类创建对象时,让对象 调用类的方法。所有方法的细节,都被封装在类内部。

小明爱跑步:体重75kg,跑步会减肥0.5Kg,吃东西会增重1kg.

class Person:def __init__(self,new_name,new_weight):self.name=new_nameself.weight=new_weightdef eat(self):self.weight+=1def run(self):self.weight-=0.5def __str__(self):return "%s 重 %.2f kg" % (self.name,self.weight)
xiaoming=Person("xiaoming",65)
#这里定义的类型决定了,该属性能够进行什么操作。
xiaoming.eat()
xiaoming.run()
print(xiaoming)

同一个类创建的不同对象的属性是互补干扰的。

一个对象的属性可以是另一个类创建的对象,被使用的类应该先开发。

4.1 身份运算符号 is、is not

身份运算符号 is、is not,比较两个对象的内存地址是否一致。
比较运算符==判断两个变量的值是否相等。
在Python中对None进行比较时建议使用is进行比较。
在这里插入图片描述

4.2 私有属性和私有方法

在实际应用中对象的某些属性或者方法只希望在对象的内部使用,而不希望外部访问。
私用属性: 对象不希望公开的属性
私有方法: 对象不希望公开的方法

定义方式:在定义属性或者方法时,在属性或者方法名下面 增加 两个下划线,定义的就是私有属性或者方法。实际是伪私有属性 和 伪私有方法,Python解释器会给加下划线的属性名和方法名做特殊处理,使用对应的属性名依旧可以访问。

_类名__属性名

在对象的方法内部,可以访问私有属性,但是在外界,不能访问私有属性(对象名.属性名)或者私有方法(对象名.方法名)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习问题总结(02)

文章目录1.stacking模型以及做模型融合的知识1.1 从提交结果中融合1.2 stacking1.3 blending2. 怎样去优化SVM算法模型的?2.1 SMO优化算法2.2 libsvm 和 Liblinear3.现有底层是tensorflow的keras框架,如果现在有一个tensorflow训练好的模型,k…

C/C++常见面试题(四)

C/C面试题集合四 目录 1、什么是C中的类?如何定义和实例化一个类? 2、请解释C中的继承和多态性。 3、什么是虚函数?为什么在基类中使用虚函数? 4、解释封装、继承和多态的概念,并提供相应的代码示例 5、如何处理内…

机器学习问题总结(03)

文章目录1.struct和class区别,你更倾向用哪个2.kNN,朴素贝叶斯,SVM的优缺点,各种算法优缺点2.1 KNN算法2.2 朴素贝叶斯2.3SVM算法2.4 ANN算法2.5 DT算法3. 10亿个整数,1G内存,O(n)算法,统计只出…

redis——新版复制

sync虽然解决了数据同步问题,但是在数据量比较大情况下,从库断线从来依然采用全量复制机制,无论是从数据恢复、宽带占用来说,sync所带来的问题还是很多的。于是redis从2.8开始,引入新的命令psync。 psync有两种模式&a…

Python(23)-面向对象2-继承,多态

面向对象基本概念2--继承、多态1.继承基本概念2.子类重写父类方法2.1完全重写2.2扩展父类方法--super()3.多继承4.新式类和旧式类5.多态基本概念6.类属性、类方法-classmethod6.1类属性6.2类方法classmethod7.静态方法staticmethod8.案例分析本系列博文来自学习《Python基础视频…

机器学习问题总结(04)

文章目录1、MLP的BP过程2、maxpool层BP怎么做的2.1 **mean pooling**2.2 max pooling3、opencv遍历像素的方式,讲两种?4、传统图像处理有了解过吗,比如去噪 特征提取5、问在linux下写过代码吗? 问用了什么软件工具6、LDA&#xff…

持续更新的Zookeeper知识总结

简介 Zookeeper为分布式应用 提供了高效且可靠的分布式协调服务,提供了诸如统一命名服务、发布订阅、负载均衡、配置管理和分布式锁等分布式的基础服务。 设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集&#xf…

机器学习问题总结(05)

文章目录1. Hadoop、Spark1.1 hadoop1.2 spark1.3 MapReduce1.3.1 概念1.3.1 MapReduce执行流程2、机器学习场景3、推荐系统(预测电影等级)4、CTR(点击通过率 -> 广告)5、SVM5.1 svm的原理5.2 SVM的核技巧6、K-means6.1 K-mean…

基于Socket的UDP和TCP编程介绍

一、概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议。 TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(streamsocket)的一种。 UDP:用户数据报协议。U…

Java多线程——基本概念

线程和多线程 程序:是一段静态的代码,是应用软件执行的蓝本 进程:是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程 线程:是比…

textCNN初探

文章目录目录1.什么是textCNN1.1 textCNN 提出的背景1.2 textCNN 合理性分析2.textCNN相比于传统图像领域的CNN有什么特点?3.textCNN例子讲解3.1 参数和超参数3.2 textCNN的数据3.3 textCNN的网络结构定义3.4 代码目录 1.什么是textCNN 1.1 textCNN 提出的背景 我…

词嵌入初探

文章目录目录1.词嵌入产生的背景1.1 NLP关键:语言的表示1.2 NLP词的表示方法类型1.2.1 独热表示one-hot1.2.2 词的分布式表示distributed representation1.3 NLP中的语言模型1.4 词的分布表示1.4.1 基于矩阵的分布表示1.4.2 基于聚类的分布表示1.4.3 基于神经网络的…

VIM使用系列之一——配置VIM下编程和代码阅读环境

作者:gnuhpc from http://blog.csdn.net/gnuhpc http://gnuhpc.wordpress.com/ 本文环境:ubuntu 10.10/vim7.2 前言:一年前写过一篇关于VIM的C/C编程环境的文字,一年中又接触了很多东西,深入使用中发现其实还是需要有…

fastText初探

目录:1、应用场景2、优缺点3、FastText的原理4、FastText词向量与word2vec对比 目录: 1、应用场景 fastText是一种Facebook AI Research在16年开源的一个文本分类器。 其特点就是fast。相对于其它文本分类模型,如SVM,Logistic …

python中使用“if __name__ == '__main__'”语句的作用

首先用最简洁的语言来说明一下 if __name__ __main__: 的作用:防止在被其他文件导入时显示多余的程序主体部分。 先举个例子,如果不用if __name__ __main__: 会发生什么事: 首先在yy.py中调用cs.py #yy.pyimport csprint(引用cs)cs.cs()p…

redis——sentinel

什么是哨兵机制 Redis的哨兵(sentinel) 系统用于管理/多个 Redis 服务器,该系统执行以下三个任务: 监控: 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。 提醒:当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他…

FM,FFM及其实现

在推荐系统和计算广告业务中,点击率CTR(click-through rate)和转化率CVR(conversion rate)是衡量流量转化的两个关键指标。准确的估计CTR、CVR对于提高流量的价值,增加广告及电商收入有重要的指导作用。业界…

linux-在cenos上安装大全(nginx/JRE/maven/Tomcat/MYSQL/redis/kafka/es...)

云服务器 阿里云 腾讯云 七牛云 百度云 天翼云 华为云 西部数码 自己购买一个,学生和企业用户都有优惠的。 putty 自己下载一个putty,用来操作云服务器。 putty.org 一路下一步就ok。 点击putty.exe,输入你的ip或域名 最好改成20&#xff1…

KKT条件初步理解

最近学习的时候用到了最优化理论,但是我没有多少这方面的理论基础。于是翻了很多大神的博客把容易理解的内容记载到这篇博客中。因此这是篇汇总博客,不算是全部原创,但是基础理论,应该也都差不多吧。因才疏学浅,有纰漏…

redis——实战点赞

点赞功能随处可见,我们都知道点赞是一个非常高频的操作,redis就非常适合做这种工作。 实现效果: 分析:三种类型:给帖子点赞,给评论点赞,给回复点赞 我们只实现查看点赞数量的话,只…