1、面向对象设计

def school(name,addr,type):#定义一个大函数的作用就是不能让狗调用学校的方法
#学校动作
def kaoshi(school):
print("[%s]学校正在考试" %school["name"])
def zhaosheng(school):
print("[%s]学校[%s]正在招生" %(school["type"],school["name"]))
#学校特征
sch = {
"name": name,
"addr": addr,
"type": type,
"kaoshi":kaoshi,
"zhaosheng":zhaosheng,
}
return sch#返回的是一个字典里面包含特征和kaoshi zhaosheng的内存地址
s1=school("清华","北京","公立")#运行school这个大函数,把返回值的字典赋值给s1
print(s1)
s1["kaoshi"](s1)#运行kaoshi这个函数,把s1自己作为参数穿进去,取值到kaoshi是s1["kaoshi"]加()就是运行函数
s2=school("北大","北京","公立")
print(s2)
s2["zhaosheng"](s2) C:\python35\python3.exe D:/pyproject/day24/面向对象设计学习.py {'zhaosheng': <function school.<locals>.zhaosheng at 0x0000000000B22400>, 'type': '公立', 'kaoshi': <function school.<locals>.kaoshi at 0x0000000000B22378>, 'addr': '北京', 'name': '清华'} [清华]学校正在考试 {'zhaosheng': <function school.<locals>.zhaosheng at 0x0000000000B22510>, 'type': '公立', 'kaoshi': <function school.<locals>.kaoshi at 0x0000000000B22488>, 'addr': '北京', 'name': '北大'} [公立]学校[北大]正在招生

2、定义一个init初始化函数,但是不够好,

def school(name,addr,type):#定义一个大函数的作用就是不能让狗调用学校的方法
#学校动作
def kaoshi(school):
print("[%s]学校正在考试" %school["name"])
def zhaosheng(school):
print("[%s]学校[%s]正在招生" %(school["type"],school["name"]))
#学校特征
def init(name,addr,type):
sch = {
"name": name,
"addr": addr,
"type": type,
"kaoshi": kaoshi,
"zhaosheng": zhaosheng,
}
return sch#返回的是一个字典里面包含特征和kaoshi zhaosheng的内存地址
res=init(name,addr,type)#上面定义了3个子函数,但是没有运行,res是在运行init
return res#然后把字典这个结果作为school这个大函数的返回值
s1=school("清华","北京","公立")#运行school这个大函数,把返回值的字典赋值给s1
s1["kaoshi"](s1)#运行kaoshi这个函数,把s1自己作为参数穿进去,取值到kaoshi是s1["kaoshi"]加()就是运行函数
s2=school("北大","北京","公立")
s2["zhaosheng"](s2) C:\python35\python3.exe D:/pyproject/day24/面向对象设计学习.py [清华]学校正在考试 [公立]学校[北大]正在招生

3、可以把上面的res这2行合并为一行

运行school函数,把3个def子函数加载到内存中,然后运行init初始化函数,把结果(结果是一个字典)作为school的返回值返回

def school(name,addr,type):#定义一个大函数的作用就是不能让狗调用学校的方法
#学校动作
def kaoshi(school):
print("[%s]学校正在考试" %school["name"])
def zhaosheng(school):
print("[%s]学校[%s]正在招生" %(school["type"],school["name"]))
#学校特征
def init(name,addr,type):
sch = {
"name": name,
"addr": addr,
"type": type,
"kaoshi": kaoshi,
"zhaosheng": zhaosheng,
}
return sch#返回的是一个字典里面包含特征和kaoshi zhaosheng的内存地址
return init(name,addr,type)
s1=school("清华","北京","公立")#运行school这个大函数,把返回值的字典赋值给s1
s1["kaoshi"](s1)#运行kaoshi这个函数,把s1自己作为参数穿进去,取值到kaoshi是s1["kaoshi"]加()就是运行函数
s2=school("北大","北京","公立")
s2["zhaosheng"](s2) C:\python35\python3.exe D:/pyproject/day24/面向对象设计学习.py [清华]学校正在考试 [公立]学校[北大]正在招生

4、上面这样还不够好,因为init初始化函数一般都是放在最前面的,我们开始的时候放在前面会报错,因为找不到kaoshi和zhaosheng,现在放在前面是可以的了,因为def只是定义函数,并没有运行,到最下面的时候运行的时候这时候zhaosheng和kaoshi已经加载到内存中了

def school(name,addr,type):#定义一个大函数的作用就是不能让狗调用学校的方法
def init(name,addr,type):#初始化
sch = {
"name": name,
"addr": addr,
"type": type,
"kaoshi": kaoshi,
"zhaosheng": zhaosheng,
}
return sch#返回的是一个字典里面包含特征和kaoshi zhaosheng的内存地址
#学校动作
def kaoshi(school):
print("[%s]学校正在考试" %school["name"])
def zhaosheng(school):
print("[%s]学校[%s]正在招生" %(school["type"],school["name"]))
#学校特征
return init(name,addr,type)
s1=school("清华","北京","公立")#运行school这个大函数,把返回值的字典赋值给s1
s1["kaoshi"](s1)#运行kaoshi这个函数,把s1自己作为参数穿进去,取值到kaoshi是s1["kaoshi"]加()就是运行函数
s2=school("北大","北京","公立")
s2["zhaosheng"](s2) C:\python35\python3.exe D:/pyproject/day24/面向对象设计学习.py [清华]学校正在考试 [公立]学校[北大]正在招生

5、面向对象编程就是用class独特的语法去实现面向对象设计

#用面向对象编程独有的语法class去实现面向对象设计

class Dog:
def __init__(self,name,gender,type):
self.name=name
self.gender=gender
self.type=type
def bark(self):
print('一条名字为[%s]的[%s],狂吠不止' %(self.name,self.type))
def yao_ren(self):
print('[%s]正在咬人' %(self.name))
def chi_shi(self):
print('[%s]正在吃屎' %(self.type))
dog1=Dog('beiye','female','京巴')
print(dog1.__dict__) {'gender': 'female', 'type': '京巴', 'name': 'beiye'}

python的面向对象-面向对象设计的更多相关文章

  1. [python 译] 基于面向对象的分析和设计

    [python 译] 基于面向对象的分析和设计 // */ // ]]>   [python 译] 基于面向对象的分析和设计 Table of Contents 1 原文地址 2 引言 2.1 ...

  2. python函数的面向对象——面向对象设计

    通过几个函数式编号演进,理解面向对象设计 def01.py dog1 = { 'name':'元昊', 'gender':'母', 'type':'藏獒' } dog2 = { 'name':'李李' ...

  3. 利用 Python 尝试采用面向对象的设计方法计算图形面积及周长

    利用 Python 尝试采用面向对象的设计方法.(1)设计一个基类 Shape:包含两个成员函数:def cal_area(): 计算并返回该图形的面积,保留两位小数:def cal_perimete ...

  4. python学习笔记-面向对象设计

    前言 1.三大编程范式: 面向过程编程 函数式编程 面向对象编程 2.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起,便实现 ...

  5. 8.python笔记之面向对象基础

    title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...

  6. python之路---面向对象编程(一)

    一.设计思想的发展 面向机器(代码复杂,效率低,学习成本高,开发周期长)-------->面向过程(扩展性差,不适用多变的需求改变)----------->面向对象(扩展性好,但是可控性差 ...

  7. python大法好——面向对象

    python大法好——面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没 ...

  8. Python基础-week06 面向对象编程基础

    一.面向对象编程 1.面向过程 与 面向对象编程 面向过程的程序设计: 核心是 过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式 ...

  9. python进阶01 面向对象、类、实例、属性封装、实例方法

    python进阶01 面向对象.类.实例.属性封装.实例方法 一.面向对象 1.什么是对象 #一切皆对象,可以简单地将“对象”理解为“某个东西” #“对象”之所以称之为对象,是因为它具有属于它自己的“ ...

  10. python之--初始面向对象

    阅读目录 楔子 面向过程vs面向对象 初识面向对象 类的相关知识 对象的相关知识 对象之间的交互 类命名空间与对象.实例的命名空间 类的组合用法 初识面向对象小结 面向对象的三大特性 继承 多态 封装 ...

随机推荐

  1. ElasticSearch查询 第三篇:词条查询

    <ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...

  2. 写个发邮件的功能php的(全代码)

    ---恢复内容开始--- 正好做了个项目,需要在线留言,一般在线留言发邮件是很常见的方式,一开始从网上搜了很久都没有很全的,也有全一点的,但是也不能用,运行不成功,下面给大家分享一下运行成功了的全部代 ...

  3. 用opencv实现工控机的开机录像

    需要训练一个神经网络模型,可能需要用到很多视频数据,所以我想把手头的工控机设置为上电自启动,再借助opencv编译一个可执行文件,放在windows开机启动文件夹里,这样只要连接好摄像头和工控机以及电 ...

  4. CM005-逆向分析过程(上篇)

    前言 005,都说比较变态,很多人给放过去了,但是我还是决定上了它,既然变态就分两篇,上篇先实际说流程,到底应该怎么上它,下篇会告诉逆向分析的过程和方法 准备 [环境和工具] win7/xp虚拟机环境 ...

  5. unity2D背景移动补偿从而获得3d错觉效果

    2d平台跳跃游戏当相机移动的时候背景跟随进行微调移动,从而使得玩家获得3d的错觉 using System.Collections;using System.Collections.Generic;u ...

  6. Unity 图文重现官方教程视频 2droguelike 第一集

    初衷: 本人初学Unity,四处收集了一些视频和教材,学习和摸索了一段时间, 我发现官网教程简单易上手,只不过他是英文讲解不方便,我就想把他翻译翻译吧, 然后我又发现看视频学习要暂停回放好多遍,麻烦, ...

  7. 20135234mqy-——信息安全系统设计基础第十四周学习总结

    第九章 虚拟存储器 主要作用: 将主存看作是一个存储在磁盘上的地址空间的高速缓存,在主存中只保护活动的区域,并根据需要在磁盘和主存之间来回传送数据: 为每个进程提供了一致的地址空间,从而简化了存储器管 ...

  8. 2013337朱荟潼 Linux&深入理解计算机系统第七章读书笔记——链接

    第七章--链接 0.总结 链接编译时可以采用静态链接或动态链接. 连接器主要任务:符号解析和重定位. 多个目标文件可定义相同的符号,可以被连接到一个单独的静态库. 链接器可以生成部分链接的可执行文件 ...

  9. wordpress学习四: 一个简单的自定义主题

    在学习三里分析了自带的一个例子,本节我们就自己仿照他做个简单的吧,重点是调用wordpress封装好的函数和类,css和html可以稍好在调整. 将wp带的例子复制一份处理,重新名个名字. 清空ind ...

  10. 人生第一次JAVA编程,电梯(并不算完成版),以及IDEA里使用git

    首先先说说Intellij IDEA与git的互联,首先在任意(我是在coding)gitlab里新建一个工程. 然后新建一个工程记得注明url和地址.名称等 如果无法创建,则需要指定git地址 创建 ...