通过几个函数式编号演进,理解面向对象设计

def01.py

 1 dog1 = {
 2     'name':'元昊',
 3     'gender':'母',
 4     'type':'藏獒'
 5 }
 6 dog2 = {
 7     'name':'李李',
 8     'gender':'公',
 9     'type':'腊肠'
10 }
11
12 def jiao(dog):
13     print('一条狗[%s],汪汪'%dog['name'])
14
15 def yaoren(dog):
16     print('一条狗[%s]正在咬人'%dog['type'])
17
18 jiao(dog1)
19 yaoren(dog1)
20 yaoren(dog2)

def02.py

 6
 7 def dog():
 8     def jiao(dog):
 9         print('一条狗[%s],汪汪'%dog['name'])
10
11     def yaoren(dog):
12         print('一条狗[%s]正在咬人'%dog['type'])
13
14     dog1 = {
15         'name': '元昊',
16         'gender': '母',
17         'type': '藏獒',
18         'jiao':jiao,
19         'yaoren':yaoren
20     }
21     return dog1
22
23 d1 = dog()
24 d1['jiao'](d1)

def03.py

 6
 7 def dog(name,gender,type):
 8     def jiao(dog):
 9         print('一条狗[%s],汪汪'%dog['name'])
10
11     def yaoren(dog):
12         print('一条狗[%s]正在咬人'%dog['type'])
13
14     dog1 = {
15         'name': name,
16         'gender': gender,
17         'type': type,
18         'jiao':jiao,#内部函数
19         'yaoren':yaoren#内部函数
20     }
21     return dog1#因为作用域的问题,所以一定要用内部的return 返回jiao,yaoren的函数,才能被外部调用
22
23 d1 = dog('张明','母','腊肠')

24 d1['jiao'](d1)#引入返回的那个数组d1 ,

def04.py

 6
 7 def dog(name,gender,type):
 8     def jiao(dog):
 9         print('一条狗[%s],汪汪'%dog['name'])
10
11     def yaoren(dog):
12         print('一条狗[%s]正在咬人'%dog['type'])
13
14     def init(name,gender,type):
15         dog1 = {
16             'name': name,
17             'gender': gender,
18             'type': type,
19             'jiao':jiao,#内部函数
20             'yaoren':yaoren#内部函数
21         }
22         return dog1
23
24     return init(name,gender,type)
25
26 d1 = dog('张明','母','腊肠')
26 print(d1['name'],d1['gender'])
27 d1['jiao'](d1)#引入返回的那个数组d1 ,

# 那么一个函数,
# 就是给定不同属性,设置属性到它内部,
# 并且它内部的函数使用了这些属性,完成了新的动作,
# 通过返回方法至一个字典当中,让外部调用这个方法(属性和方法都需要让外部去访问,在字典类型当中来讲,是平等的),
# 即完成了所谓的【面向对象】

# 对象在不描述之前什么都不是。
# 对象就是需要描述它的动作和特征,才能去定义它。比如:人,长什么样,能做什么;灯泡,是什么样,能做什么。

# 类是抽象的,只有属性和方法。 dog()函数就是
# 但对象是经过动作和特征的定义的。d1 定义后,就是一条狗了
# 这就是面向对象设计

类就像模板,定义后就是一个对象了。

由 类-----产生-----对象的过程叫做实例化(实例=对象)

在python当中,没有要求你一定要写面向对象的代码。用面向对象的语言,和一个程序的设计是面对对象的,两者无任何关系。

你写的程序是不是面向对象的,和你用的语言是不是面向对象的无关系!面向对象设计,只不过是函数/过程式编程的演进。关键在于面向对象的设计思路。

转载于:https://www.cnblogs.com/ekuj/p/8472392.html

python函数的面向对象——面向对象设计相关推荐

  1. Python函数和面向对象,小白看了都说好

    Python函数和面向对象,小白看了都说好 python除了使用内置函数以外,还可以自定义函数.我们为什么要定义和使用函数呢? 下面我举个例子,比如我想求10的阶乘 # 求10的阶乘 m = 1 fo ...

  2. Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数)...

    Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数) https://mubu.com/doc/1AqL_M0IbW 继承之钻石继承 多态 封装 几个装饰 ...

  3. Python(函数与面向对象)

    Python(函数与面向对象) @(Knowledge)[Python, Auspice Vinson] 文章目录 Python(函数与面向对象) @[toc] 函数(function) 定义函数 调 ...

  4. 【Python学习笔记】面向对象三大特性

    2019独角兽企业重金招聘Python工程师标准>>> ★面向对象:封装.继承和多态是面向对象的三大特点★ 面向对象编程简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元 ...

  5. python面向对象和面向过程的区别_Python11-01_面向对象----面向对象和面向过程的区别...

    面向对象编程 面向对象(OPP)编程思想主要针对大型软件设计而来的.面向对象编程使程序的扩展性更加强,可读性更好.使得编程可以像搭积木一样简单. 面向对象编程将数据和操作数据的方法封装到对象中,组织代 ...

  6. Python学习笔记:面向对象高级编程(上)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  7. Python学习笔记:面向对象编程(1)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  8. Dave Python 练习十五 -- 面向对象编程

    #encoding=utf-8 ### *************** 面向对象编程 ******************** #*********** Part 1: 面向对象编程 ******** ...

  9. 重拾面向对象软件设计

    简介:从上个世纪五十年代冯·诺依曼创造第一台计算机开始,一直到现在只有短短70年时间,从第一门计算机语言FORTRAN,到现在我们常用的C++,JAVA,PYTHON等,计算机语言的演进速度远超我们所 ...

  10. Python第十七课(面向对象基础)

    Python第17课(面向对象基础)    >>>思维导图>>>中二青年 面向对象编程思想OOP 什么是面向对象 面向对象是一种编程思想,是前辈们总结出的经验,指导 ...

最新文章

  1. activiti部署、执行,完成简单示例
  2. 解决“SCRIPT257: 由于出现错误 80020101 而导致此项操作无法完成。 ”
  3. android getitem,android – ItemDecoration重写getItemOffsets()和动画
  4. C++阶段01笔记04【程序流程结构(选择结构、循环结构、跳转语句)】
  5. 互联网晚报 | 11月20日 星期六 | 阿里云单季营收首次超200亿;淘特年度活跃用户超2.4亿;首届中国网络文明大会在京召开...
  6. UCSB微软提出VIOLET,用Masked Visual-token Modeling进行端到端的视频语言学习!性能SOTA...
  7. python安装wx模板_windows下wxPython开发环境安装与配置方法
  8. 查看mysql创建 数据库_Mysql创建数据库和查看数据库
  9. 蓝桥杯 ADV-13 算法提高 最小乘积(提高型)
  10. 用HTML+CSS做员工信息登记表
  11. c语言给字母加密,C语言文字简单加密程序的实现
  12. 护眼色RGB值和HSV值
  13. YUV_420_888数据裁剪
  14. 2020网络安全NISP一级(模拟题七)
  15. JPG转换成PDF转换器使用说明
  16. crm客户管理系统如何助力企业销售管理
  17. android 呼叫 volte 电话方法
  18. python(28): 连接oracle环境离线安装及报错解决87,193
  19. 简历被肆意贩卖,个人信息安全何在?
  20. 黑马程序员 网络编程1

热门文章

  1. POJ 2115C Looooops[一元线性同余方程]
  2. 特殊的网络环境下的故障处理
  3. 1018. 锤子剪刀布 (20)
  4. PHP大文件分割上传(分片上传)
  5. 浅谈代码审计入门实战:某博客系统最新版审计之旅
  6. Android 使用WakeLock
  7. SSCLI中GC源码分析(1) - EE与BCL之间的调用接口FCall
  8. java day56【 Mybatis 延迟加载策略 、 Mybatis 缓存、Mybatis 注解开发 】
  9. 关于js里的那一堆事件
  10. Java基本类型占用字节数(或 bit数)