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

    1.什么是Redis? Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存. ...

  2. Java集合内容

    Java的集合类定义在java.util包中,支持泛型,主要提供了3种集合类,包括List,Set和Map.Java集合使用统一的Iterator遍历. 1.List遍历 实现了Iterator接口的 ...

  3. mysql存储4字节的表情包数据报异常_Emoji表情包_Incorrect string value: '\xF0\x9F\x98\x84\xF0\x9F

    本文章转载自:https://www.cnblogs.com/coprince/p/7485968.html 原文如下: 问题描述:从新浪微博抓取消息保存到MySQL数据中,对应数据库字段为varch ...

  4. pycharm查看函数用法,参数信息的设置方法

    在编写python程序时,常常会遇到一些不太常见的函数,有时候又不想去百度,那么,使用pycharm设置快速显示函数的参数和用法,这个方法十分快捷方便. step1. file -> setti ...

  5. 这7个npm命令将帮助您节省时间

    作为JavaScript开发人员,NPM是我们一直使用的东西,并且我们的脚本在终端上连续运行. 如果我们可以节省一些时间呢? 1.直接从npm打开文档 如果我们可以直接使用npm跳转到软件包的文档怎么 ...

  6. 获取redis中所有的key,清空整个 Redis 服务器的数据

    获取 redis 中所有的 key 可用使用 *. redis 127.0.0.1:6379> KEYS * Redis Flushall 命令用于清空整个 Redis 服务器的数据(删除所有数 ...

  7. diango下载、创建、启动

    下载 命令行 pip install django==1.11.26 -i https://pypi.tuna.tsinghua.edu.cn/simple pycharm 创建项目 命令行 djan ...

  8. 自建KMS服务器激活Windows office

    一.KMS服务器环境介绍    操作系统Centos 7.x  Windows Server 也是可以的,此处以Centos7为例安装,使用默认1688端口号 二.服务端安装过程: 1.下载安装包(这 ...

  9. sublime相关操作

    装插件 1,安装过Package Control ctrl + shift + p 输入install package 选择 Package Control: Install Package 搜索自己 ...

  10. 如何在Mac上识别和删除损坏的字体

    字体看起来像无害的文件,而且大多数时候都是这样.但是,就像任何计算机文件一样,字体可能会损坏或损坏.发生这种情况时,它们可能会导致文档或应用程序出现问题.在Mac上使用“ 字体簿”来验证已安装的字体, ...