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

    转载请注明作者及出处: 作者:银河架构师 原文链接:https://www.cnblogs.com/luas/p/12068846.html 1.版本 最新稳定版本为1.1.4,也可以从发版说明.博客 ...

  2. mac环境 python3.7 lzma.py 报错解决

    import pandas as pd 在使用pandas时报Could not import the lzma module解决方法: 1.安装了 backports.lzma pip3 insta ...

  3. MySQL 重置Mysql root用户账号密码

    重置Mysql root用户账号密码 By:授客 QQ:1033553122   问题描述: 使用mysqladmin.exe执行命令时出现以下错误提示: mysqladmin: connect to ...

  4. 搭建Vue开发环境

    1.安装Node.js 安装包下载地址: https://nodejs.org/en/ 安装时可以选择是否自动安装必要的工具,如Chocolatey.Python2,这里我选择了自动安装 Node.j ...

  5. idea git提交代码步骤

    这位兄台已经写的很清楚了... 我这里直接给你们链接把... https://blog.csdn.net/u013452337/article/details/79956604 Git 初次提交,以及 ...

  6. RHEL5.6静默安装oracle11.2.0数据库实例脚本

    脚本:单实例静默安装echo '[GENERAL] RESPONSEFILE_VERSION = "11.2.0" //查看虚拟机的版本,不能更改 OPERATION_TYPE = ...

  7. spring+cxf No bean named 'cxf' available

    最近项目中需要用到webservice,在spring中集成cxf时一直报错: 严重: StandardWrapper.Throwable org.springframework.beans.fact ...

  8. 实训第六天(mybatis)

    今天实训第六天,我们学习了mybatis这个数据库框架,虽然说框架的环境搭建非常的繁琐,但是在了解原理和流程之后是非常的舒服的.因为有一个强大的工具被我掌握了,所以今天感觉非常的开心. 首先我们是在s ...

  9. Centos 7.5私有域名服务器部署(coredns+etcd)

    单机配置: 一.安装etcd:   1.安装 yum install etcd -y   2.启动 systemctl start etcd   3.设置开机启动 systemctl enable e ...

  10. 数组类的创建——DynamicArray.h

    完成DynamicArray类的具体实现 DynamicArray设计要点——类模板 动态确定内部数组空间的大小 实现函数返回数组长度 拷贝构造和赋值操作 DynamicArray类的声明 templ ...