本节主要内容:

1.面向对象和面向过程

2.面向对象如何编写

3.面向对象和面向过程的对比

4.面向对象的三大特征

一.面向对象和面向过程(重点理解)

1.面向过程:一切以事物的流程为核心.核心是"过程"二字,过程是指解决问题的步骤,即先干什么,

后干什么.基于该思想编写程序就好比在编写一套流水线.是一种机械式的编程思维

优点:负责的问题流程化,编写相对简单

缺点:可扩展性差

2.面向对象:一切以对象为中心.

优点:可扩展性强

缺点:编程的复杂程度高于面向过程

二.面向对象如何编写

先创建类: 归类,对某些事物进行总结. 相当于图纸

使用类可以创建对象:

class 类名(object)
def __init__(self, name, age): # 构造方法. 创建对象的时候自动调用这个方法
self.name = name
self.age = age def 方法名(self, 参数);
方法体(return)

创建对象:

变量(引用,类似于文件操作的句柄) = 类名(参数)

#访问对象的属性信息

对象.属性

#方法的访问

对象.方法()

创建一个类
# Car 类名. 类是对事物的定义. 归类
class Car:
pass c = Car() # 把类概念进行实例化. 通过类来创建对象
# # 对象 = 类() c.lunzi = "圆的" # 属性
c.color = "骚红色"
c.pailiang = "6.3T"
c.paizhao = "京A66666"
# . 的
print(c.pailiang)
print(c.color)
print(c.paizhao)
print(c.lunzi)
# 类名首字母大写.
class Computer: # 构造方法. 在创建的对象的时候由系统自动访问这个方法
# self: 自己. 自身. 类的对象. 当前正在创建的对象
def __init__(self, pinpai, price, cpu, neicun): # 谁在调用, self就是谁, self 由python自动传递
self.pinpai = pinpai
self.price = price
self.cpu = cpu
self.neicun = neicun # 方法. 该类型的对象能够执行哪些操作
def dayouxi(self, game): # 谁调用的这个方法. self就是谁
# 我用我的self.pinpai的调用. 利用很牛B的self.cpu来完成吃鸡操作
print("我要打游戏, 我要%s" % game) c = Computer("微软",25000,"i9","5T") # 创建对象
c.dayouxi("吃鸡")

 总结:类与对象的关系:类是对事物的总结.抽象的概念.类用来描述对象.对象是类的实例化的结果,对象能执行哪些方法.

都是由类来决定.类中定义了什么,对象就拥有什么.

练习题:

用面向对象的思维来完成用户登录.

class User:
def __init__(self,username,password):
self.username =username
self.password = password def login(self,usern,upsw):
if usern == self.username and upsw == self.password :
return "登录成功"
else:
return "账户或密码错误" p1 = User("afly","")
ret=p1.login(input("请输入你的账户"),input("请输入你的密码"))
print(ret)

三.面向对象和面向过程的对比

各自有各自的优缺点, 得看需求.

大型项目更适合面向对象,而小型脚本程序更适合面向过程

要把大象装冰箱
def open():
print("开门")
def zhuang():
print("装大象")
def close():
print("关门") open()
zhuang()
close() class DaXiang:
def open(self):
print("开门")
def jinbingxiang(self):
print('进冰箱')
def guanmen(self):
print("关门") dx = DaXiang()
dx.open()
dx.jinbingxiang()
dx.guanmen()

通过上面的例子可以发现:

# 主语发生了改变
# 函数式编程. 简单的基本功能还是函数式编程更加好用
# 面向对象: 如果功能非常复杂的时候.
#  alex大战奥特曼

#面向过程:
def daZhanAoTeMan(name, wuqi, jineng):
print("%s 使用 %s 配合 %s技能狂怼奥特曼" % (name, wuqi, jineng))
# alex大战哥斯拉
def daZhanGeSiLa(name, wuqi, jineng):
print("%s 使用 %s 配合 %s技能狂怼哥斯拉" % (name, wuqi, jineng))
# alex大战蝙蝠侠
def daZhanBianFuXia(name, wuqi, jineng):
print("%s 使用 %s 配合 %s技能狂怼蝙蝠侠" % (name, wuqi, jineng)) daZhanAoTeMan("alex", "菜刀", "动感光波")
daZhanGeSiLa("alex", "菜刀", "动感光波")
daZhanBianFuXia("alex", "菜刀", "动感光波")

#面向对象:
class Person:
def __init__(self, name, wuqi, jineng, taopaoluxian):
# 封装: 对属性的封装.
self.name = name
self.wuqi = wuqi
self.jineng = jineng
self.taopaoluxian = taopaoluxian # 对方法进行封装
def daZhanAoTeMan(self):
print("%s 使用 %s 配合 %s技能狂怼奥特曼" % (self.name, self.wuqi, self.jineng)) # alex大战哥斯拉
def daZhanGeSiLa(self):
print("%s 使用 %s 配合 %s技能狂怼哥斯拉" % (self.name, self.wuqi, self.jineng)) # alex大战蝙蝠侠
def daZhanBianFuXia(self):
print("%s 使用 %s 配合 %s技能狂怼蝙蝠侠" % (self.name, self.wuqi, self.jineng)) a1 = Person("alex", "菜刀", "动感光波", "打车跑")
a1.daZhanAoTeMan()
a1.daZhanBianFuXia()
a1.daZhanGeSiLa()

通过上面的案例发现,明显面向对象的思想更加清晰一些.代码也更容易编写,所以,用那种编程思想不是绝对的,得根据需求和需要来完成.

四.面向对象的三大特征

面向对象三大特征: 封装,继承,多肽.只要是面向对象编程语言.都有这三个特征.

1.封装:把很多数据封装到一个对象中.把固定功能的代码封装到一个代码块,函数,对象,打包成模块.这都属于封装的思想.具体的情况具体分析.

在面向对象思想中,是把一些看似无关紧要的内容组合到一起统一进行储存和使用.就是封装.

2.继承:子类可以自动拥有父类中除了私有属性外的其他所有内容.在python中实现继承非常简单.在声明类的时候,在类名后面添加一个小括号,

就可以完成继承关系.一个类可以同时继承多个父类,具体的MRO(method resolution order)算法.后面会聚义分析和讲解

3.多态:同一个对象,多种形态.

# 继承: 子类自动拥有父类中除了私有内容外的其他所有内容
# 现在我们写的内容没有私有的 class Niu:
def da(self):
print("牛魔王打架很厉害") class HongHaiEer(Niu):
def da(self):
print("喷火") hhl = HongHaiEer()
hhl.da() class Animal:
def chi(self):
print("喜欢吃东西") # 当程序中出现了 x是一种y. x可以继承y
class Cat(Animal):
pass class Foo:
def a(self):
pass def b(self):
pass class Bar(Foo): # 子类在父类的基础上扩展了一些功能. 派生
def c(self):
pass b = Bar()
b.a()
b.b()
b.c() class DBUtil: def __init__(self, ip, username, password):
pass
def test_connect(self):
pass
def connect(self):
pass
def close(self):
pass class Mysql_Util(DBUtil): def add(self):
pass
def delete(self):
pass
def update(self):
pass class Oracle_Util(DBUtil): def add(self):
pass
def delete(self):
pass
def update(self):
pass

多继承

class Foo1:
def money(self):
print("有钱") class Foo2:
def play(self):
print("玩儿") def money(self):
print("没钱") class Bar(Foo2, Foo1): # MRO c3算法
pass b = Bar()
b.money()

多态

# 同一个对象. 拥有多种形态 java c++
class Aniaml:
def dong(self):
print("动物可以动") class Cat(Aniaml):
def chi(self):
print("猫喜欢吃鱼") a = Cat()
a.chi() # 站在猫的角度. 可以吃
a.dong() # 站在动物的角度可以动 # 在python中多态的效果感受不够明确
class YaoGuai:
def teng(self):
print("妖怪一定会疼") class ZhiZhuJing(YaoGuai):
def teng(self):
print("蜘蛛精很痛") class HeiXiongJing(YaoGuai):
def teng(self):
print("黑熊精也很疼") class BaiGuJing(YaoGuai):
def teng(self):
print("白骨精骨头很疼") class JinJiaoDaWang(YaoGuai):
def fangundeteng(self):
print("爆炸的疼") class SunWuKong:
def da(self, yg):
yg.teng() # 只要包含了xxx功能的内容都可以试用. 鸭子模型 -> 多态性 # 西游记开始
swk = SunWuKong() hxj = HeiXiongJing()
swk.da(hxj) bgj = BaiGuJing()
swk.da(bgj) zzj = ZhiZhuJing()
swk.da(zzj) alex = JinJiaoDaWang()
swk.da(alex)

多态的好处:程序具有超高的可拓展性.面向对象思想的核心与灵魂.python自带多态

python学习 day15打卡 初识面向对象的更多相关文章

  1. python学习 day09打卡 初识函数

    本节内容: 1.什么是函数 2.函数定义,函数名,函数体及函数的调用 3.函数的返回值 4.函数的参数 一.什么是函数 函数:对代码块和功能的封装和定义 定义一个事情或者功能.等到需要的时候直接去用, ...

  2. Python学习系列(八)( 面向对象基础)

     Python学习系列(八)( 面向对象基础) Python学习系列(七)( 数据库编程) 一,面向对象 1,域:属于一个对象或类的变量.有两种类型,即实例变量—属于每个实例/类的对象:类变量—属于类 ...

  3. python学习-第四天补充-面向对象

    python学习-第四天补充-面向对象 python 私有 --name mangling(名字修改.名字) 在命名时,通过使用两个下划线作为开头,可以使得这个变量或者函数编程私有的,但是这个其实的p ...

  4. Python学习(十二) —— 面向对象

    一.初识面向对象 面向过程的核心是过程,流水线思维,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点:极大地降低了写程序的复杂度,只需要顺着要执行的 ...

  5. python学习笔记-(十)面向对象基础

    面向对象相关知识简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义 ...

  6. python学习 day016打卡 面向对象--成员

    本节主要内容: 1.类的成员 2.类的成员-变量 3.类的成员-方法 4.类的成员-属性 5.私有 一.类的成员: 能在类中写的内容就是类的成员. class 类名: #方法 def __init__ ...

  7. python学习笔记-(十一)面向对象进阶&异常处理

    上篇我们已经了解了一些面向对象的基础知识,本次就了解下面向对象的一些进阶知识(虽然我也不知道有什么卵用). 静态方法 静态方法是一种普通函数,就位于类定义的命名空间中,它不会对任何实例类型进行操作.使 ...

  8. python学习 day017打卡 类与类之间的关系

    本节主要的内容: 1.依赖关系 2.关联关系,组合关系,聚合关系 3.继承关系,self到底是什么? 4.类中的特殊成员 一.类与类之间的依赖关系 在面向对象的世界中,类与类中存在以下关系: 1.依赖 ...

  9. python学习 day013打卡 内置函数

    本节主要内容: 内置函数: 内置函数就是python给你提供的.拿来直接用的函数,比如print,input等等.截止到python版本3.6.2 python一共提供了68个内置函数.他们就是pyt ...

随机推荐

  1. hive的find_in_set函数

    集合查找函数: find_in_set语法: find_in_set(string str, string strList) 返回值: int说明: 返回str在strlist第一次出现的位置,str ...

  2. 转:C#线程系列讲座(1) BeginInvoke和EndInvoke方法

    转载自:http://www.cnblogs.com/levin9/articles/2319248.html 开发语言:C#3.0IDE:Visual Studio 2008本系列教程主要包括如下内 ...

  3. GoldenGate 12.3 MA架构介绍系列(4)–Restful API介绍

    OGG 12.3 MA中最大的变化就是使用了restful api,在前面介绍的各个服务模块,其实就是引用restful api开发而来,这些API同时也提供对外的集成接口,详细接口可参考: http ...

  4. CentOS7下部署Django项目详细操作步骤

    严格按下面步骤 一.更新系统软件包 yum update -y 二.安装软件管理包和可能使用的依赖 yum -y groupinstall "Development tools" ...

  5. 通过RMAN 识别失败数据库损坏的对象

    背景 业务起不来,读取数据库时报坏块,无法读取数据 数据库版本:11.2.0.3 数据库无备份,无归档 1. 识别坏块 执行以下命令后,rman 会把坏块信息统计到 v$database_block_ ...

  6. Vue小案例 之 商品管理------为之前的页面修改样式

    最终修改的页面效果: 修改的css: <style> #container{ margin: auto; text-align: center; width: 1000px; border ...

  7. oracle 11g亿级复杂SQL优化一例(数量级性能提升)

    自从16年之后,因为工作原因,项目中就没有再使用oracle了,最近最近支持一个项目,又要开始负责这块事情了.最近在跑性能测试,配置全部调好之后,不少sql还存在性能低下的问题,主要涉及执行计划的不合 ...

  8. VS 域名绑定IIs 调试

    一排致敬老师傅:https://www.cnblogs.com/woxpp/p/5805624.html 问题: 域名www.jinhuang.com,网站的ip地域跳转出问题,需要测试. ①修改Ho ...

  9. k8s环境搭建

    mirantis 有个培训, 提供了安装脚本 git clone https://bitbucket.org/mirantis-training/kd100-scripts 网络采用的是calico ...

  10. yum指定安装目录

    纯粹做笔记 yum -c /etc/yum.conf --installroot=/opt/test/ --releasever=/ install lrzsz