在此之前学习的编程方式均称为面向过程,过程类似于函数,只能执行,没有返回值
面向过程和面向对象
面向过程-->怎么做?
面向对象-->谁来做?
相比函数,面向对象 是更大的封装,根据职责在一个对象中封装多个方法
 
面向对象的三大特性:
封装:根据职责将属性和方法封装到一个抽象的类中
继承:实现代码的重用,相同的代码不需要重复编写
多态:不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活性
 
类和对象
定义:
类是一群具有相同特征(即属性)或者行为(即方法)的事物的一个统称,是抽象的,不能直接使用
对象 是有类创建出来的一个具体的存在,可以直接使用
由哪一个类创建出来的对象,就拥有在哪一个类中定义属性和方法
类与对象的关系:
  • 在程序开发中,先有类,在有对象
  • 类只有一个,对象可以有很多个。在内存的保存地址是不一样
  • 不同对象之间属性可能会不相同
  • 类中定义了什么属性和方法,对象中就有什么属性和方法,不可能多也不可能少
打个比方:类就像是创建飞机的图纸,不能飞,就是一个模板,对象就是根据图纸制造出来的飞机
 
 
类的设计
三要素:
类名:一类事物的名称,满足大驼峰命名法(每一个首字母都是大写,单词与单次之间没有下划线)
属性:这类事物有什么特征
方法:这类事物有什么行为
 
dir内置函数(科普)
作用:使用内置函数dir传入标识符或数据。可以查看对象内所有属性和方法
在Python中,看到格式为 __方法名__ 就是Python提供的内置方法/属性
查看方式:进入ipython 输入dir("abc")
 
定义类
格式:
class 类名:
def 方法1(self,参数列表):
pass
def 方法2(self,参数列表):
pass
 
创建对象
当一个类定义完成后,需要使用这个类来创建对象
语法格式:
对象变量 = 类名 ()
对象在内存中存储的地址用十六进制表示
 
方法中self参数
给对象增加属性:对象.属性名 利用赋值语句就可以
利用self在类封装的方法可以输出输出属性值
由哪一个对象调用的方法,方法内部的self就是哪一个对象的引用
# 需求:小猫爱吃鱼,小猫要喝水
 
 
定义一个猫类 cat
定义两个方法 eat 和drink
按照需求不需要定义属性
 
# 创建类
class Cat:
def eat(self):
print ( "小猫爱吃鱼" )
def drink(self):
print ( "%s 爱喝水,年龄是 %d" % (self.name, self.age) ) --》这种方法一般不推荐
# 创建对象
tom = Cat ()
amy = Cat ()
tom.age = 2
tom.name = "大懒猫"
tom.drink ()

  

对象初始化方法
当时用类名() 创建对象时,会自动执行一下操作:
  • 为对象在内存中分类空间----创建对象
  • 为对象的属性设置初始值----初始化方法(init)
class Cat:
def __init__(self):
print("这是一个初始化方法")
 
self.name=“大懒猫”
 
tom=Cat()
与上述练习的例子相比,如果上述代码不写tom.drink() 是没有输出的,对比下面创建了对象就会有输出
 
在初始化方法中定义属性
使用方式: self.属性名=属性的初始值,如上self.name=“大懒猫”
使用参数设置属性的初始值
class Cat:
def __init__(self,name):
self.name = name #在方法内部使用self.name=形参 接收外部传递的参数
def eat(self):
print("%s 爱吃鱼" % self.name)
 
tom=Cat("大懒猫") #在创建对象时,使用类名(属性1,属性2...)调用
tom.eat()
 
del方法和对象的声明周期
当一个对象从使用一个 类名( ) 创建,对象的生命周期开始
一个对象的 __del__ 方法,一旦被调用,生命周期结束
在对象的生命周期内,可以访问对象的属性,或者对象调用方法
 
__str__方法
__str__方法必须返回一个字符串
利用该方法可以打印自定义内容
 
如果没有__str__方法,针对上述的例子中 print(tom)打印对象输出的信息如下:
<__main__.Cat object at 0x01E51330>
所以在__str__方法中必须要有返回的字符串信息
格式如下:
class Person ():
def __init__(self, name, weight):
self.name = name
self.weight = weight def __str__(self):
return "我的名字叫 %s,体重是 %.2f 公斤" % (self.name, self.weight)

 注意:在init方法中定义的变量在后续的方法中均可以调用

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

面向对象OPP的更多相关文章

  1. PHP其它常用函数;<<<面向对象(OPP)的三大特性:封装、继承、加态:>>> <----面试题 ;构造方法、析构方法,魔术方法、set、get方法;静态;抽象类;接口

    PHP其它常用函数:     赋值:$r->name = "元素";      取值: echo $r->name;  count()   计算数组中的元素数目或对象中 ...

  2. 面向对象(OPP)的三大特征之 继承

    OPP(面向对象编程的缩写)的三大优势: 1.继承 2.封装 3.多态 一.继承 1.继承:是两个对象之间的一种关系 a继承b 例如王思聪继承王健林 在OPP中继承是描述类与类之间的一种关系 2.继承 ...

  3. python基础-面向对象opp

    上述是实例化对象的一个过程. 类的定义和实例化: class Role(object): #定义一个类, class是定义类的语法,Role是类名,(object)是新式类的写法,必须这样写,以后再讲 ...

  4. 面向对象编程(OPP)

    作者:狐狸家的鱼 本文链接:面向对象编程 GitHub:sueRimn 面向对象编程(OPP) 具有灵活.代码可复用.高度模块化等特点,易维护和开发 实例对象与new命令 1.对象 对象是单个实物的抽 ...

  5. 理解面向过程(OPP)、面向对象(OOP)、面向切面(AOP)

    概念 面向过程编程OPP:Procedure Oriented Programming,是一种以事物为中心的编程思想.主要关注“怎么做”,即完成任务的具体细节. 面向对象编程OOP:Object Or ...

  6. 面向过程编程(OPP) 和面向对象编程(OOP)的关系

    面向过程编程(OPP) 和面向对象编程(OOP)的关系 原文链接:http://blog.csdn.net/phphot/article/details/3985480 关于面向过程的编程(OPP)和 ...

  7. OPP面向对象的介绍及使用

    概述 面向过程与面向对象面向过程:专注于如何去解决一个问题的过程,编程特点是用一个个函数去实现过程操作,没有类与对象的概念面向对象:专注于有哪一个对象实体去解决这个问题,编程特点是:出现了一个个的类, ...

  8. 读书笔记-JavaScript面向对象编程(一)

    PDF下载链接: http://pan.baidu.com/s/1eSDSTVW 密码: 75jr 第1章 引言 1.1 回顾历史 1.2 变革之风 1.3 分析现状 1.4 展望未来 1.5 面向对 ...

  9. python之面向对象编程

    1.面向对象介绍: 世界万物,皆可分类 世界万物,皆为对象 只要是对象,就肯定属于某种类 只要是对象,就肯定有属性 2. 面向对象的几个特性: class类: 一个类即对一类拥有相同属性的对象的抽象, ...

随机推荐

  1. 2019icpc银川站 复现赛

    打了计蒜客上的银川重现赛,总体感觉难度上确实比平时区域赛要低上一些. 这里补一下F题和G题的思路和代码. upd:I题也补了,理解差不多都在注释里. F题        做法,玩一下n=10的样例就出 ...

  2. CURL命令学习一

    每天学习一点点.... 直接获取页面数据: curl http://www.xxx.com/[可以指定具体的路径获取某个文件] 用户名(密码): curl -u username http://www ...

  3. eruda手机端调试神器

    在日常的移动端开发时,一般都是试用chrome浏览器的移动端模式进行开发和调试,如果想在手机上能和浏览器一样看控制台调试就更加完美了: 一个手机端调试神器eruda是一个专为手机网页前端设计的调试面板 ...

  4. Dubbo学习系列之十二(Quartz任务调度)

    Quartz词义为"石英"水晶,然后聪明的人类利用它发明了石英手表,因石英晶体在受到电流影响时,它会产生规律的振动,于是,这种时间上的规律,也被应用到了软件界,来命名了一款任务调度 ...

  5. Prometheus监控(二)

    Prometheus监控(二) 数据类型 Counter(计数器类型) Counter类型的指标的工作方式和计数器一样,只增不减(除非系统发生了重置),Counter一般用于累计值. Gauges(仪 ...

  6. tesseract-OCR + pytesseract安装

    1. tesseract-OCR下载安装 地址:https://digi.bib.uni-mannheim.de/tesseract/ 选择一个版本下载,下载完成点击**.exe进行安装,若无其他需求 ...

  7. http请求报400错误的原因分析

     在ajax请求后台数据时有时会报 HTTP 400 错误 - 请求无效 (Bad request);出现这个请求无效报错说明请求没有进入到后台服务里: 原因:1)前端提交数据的字段名称或者是字段类型 ...

  8. js-03-if条件判断

    一.swich case判断语句eg <script> swich( exp){ case 值1: 执行的代码段: break; case 值2: 执行的代码段: break; ..... ...

  9. JS Timing

    JS Timing 通过使用 JavaScript,我们有能力做到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行.我们称之为计时事件. JavaScript 计时事件 通过使用 Ja ...

  10. 人生第一次研读MFC截图工具的笔记心得

    截图工具: 其中用到了动态链接库DLL技术(Dynamic Link Library)技术,键盘钩子技术,光标捕获技术,类橡皮类CRectTracker 头文件:后缀名为.cpp,主要是定义和声明之类 ...