在此之前学习的编程方式均称为面向过程,过程类似于函数,只能执行,没有返回值
面向过程和面向对象
面向过程-->怎么做?
面向对象-->谁来做?
相比函数,面向对象 是更大的封装,根据职责在一个对象中封装多个方法
 
面向对象的三大特性:
封装:根据职责将属性和方法封装到一个抽象的类中
继承:实现代码的重用,相同的代码不需要重复编写
多态:不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活性
 
类和对象
定义:
类是一群具有相同特征(即属性)或者行为(即方法)的事物的一个统称,是抽象的,不能直接使用
对象 是有类创建出来的一个具体的存在,可以直接使用
由哪一个类创建出来的对象,就拥有在哪一个类中定义属性和方法
类与对象的关系:
  • 在程序开发中,先有类,在有对象
  • 类只有一个,对象可以有很多个。在内存的保存地址是不一样
  • 不同对象之间属性可能会不相同
  • 类中定义了什么属性和方法,对象中就有什么属性和方法,不可能多也不可能少
打个比方:类就像是创建飞机的图纸,不能飞,就是一个模板,对象就是根据图纸制造出来的飞机
 
 
类的设计
三要素:
类名:一类事物的名称,满足大驼峰命名法(每一个首字母都是大写,单词与单次之间没有下划线)
属性:这类事物有什么特征
方法:这类事物有什么行为
 
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. WPF无边框可拖动窗体

    下面主要记录下创建无边框窗体,并且可以拖动.这种窗体主要用于弹出小窗体时. <Window x:Class="WpfApplication1.MainWindow" xmln ...

  2. 使用EasyPOI导入导出图片出现数组越界异常

    在我使用easypoi做导出功能的时候,突然抛了一个数组越界异常,找了很久也没找到,最后猜想有可能是路径出了问题,然后打印了一下图片存放的路径,结果发现在其保存路径上存在“.”,也就是easypoi底 ...

  3. 对python函数后面有多个括号的理解?

    一般而言,函数后面只有一个括号.如果看见括号后还有一个括号,说明第一个函数返回了一个函数,如果后面还有括号,说明前面那个也返回了一个函数.以此类推. 比如fun()() def fun(): prin ...

  4. Hive DDL、DML操作

    • 一.DDL操作(数据定义语言)包括:Create.Alter.Show.Drop等. • create database- 创建新数据库 • alter database - 修改数据库 • dr ...

  5. Android使用ActivityLifecycleCallbacks管理Activity和区分App前后台

    一.ActivityLifecycleCallbacks接口介绍 官方地址:https://developer.android.com/reference/android/app/Applicatio ...

  6. CODING 受邀参与 DevOps 标准体系之系统和工具&技术运营标准技术专家研讨会

    2019 年 5 月 24-25 日,国内领先的一站式 DevOps 解决方案供应商 CODING 作为腾讯云的深度合作伙伴,受邀参加在成都举行的由 TC608 云计算标准和开源推进委员会主办,中国信 ...

  7. 误区以为父组件render一次,子组件会重新初始化

    初学react的时候我有一个误区,以为父组件render的一次,会将子组件先卸载,再将子组件重新初始化,事实证明不是. 这是对react生命周期函数不太清楚. 父子组件都初始化后,父组件再render ...

  8. 如何在Mac上使用Siri

    在您的iPhone上,要求Siri执行命令很简单.但是,如果在计算机上工作时附近没有iPhone,会发生什么情况?您也可以在Mac上使用Siri.快速简便,使其成为iMac或MacBook的完美伴侣. ...

  9. Python元组是什么

    引出 在使用Python过程中,列表.集合和字典是比较常用的数据结构. 列表简单说就是数组,不对,它就是数组 集合就是去重的元素结构,和JAVA中的set一样 字典就是一个key-value的键值对, ...

  10. 邹传伟:对人民银行DC/EP的初步分析

    http://opinion.caixin.com/2019-11-01/101477903.html [财新网](专栏作家 邹传伟)2019年10月24日,习总书记在中央政治局第十八次集体学习中指出 ...