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. [C/C++标准库]_[初级]_[转换UTC时间到local本地时间]

    场景 1.如果有面向全球用户的网站, 一般在存储时间数据时存储的是UTC格式的时间, 这样时间是统一的, 并可以根据当地时区来进行准确的转换. 2.存储本地时间的问题就在于如果换了时区, 那么显示的时 ...

  2. C语言学习之结构体

    前言 一直以来,C语言的学习都在入门阶段,只用到数组.函数.循环.选择.位运算这些基本的知识,较少用到指针.预处理.结构体.枚举类型.文件操作等这些C语言的精髓内容,现在想想真不敢说自己熟练掌握C语言 ...

  3. ElasticSearch入门 第九篇:实现正则表达式查询的思路

    这是ElasticSearch 2.4 版本系列的第九篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  4. linux下tomcat指定jdk和配置运行参数

    一.指定运行jdk 1)set classpath.sh和catalina.sh中写入: export JAVA_HOME=/usr/local/java/jdk1.8.0_121 export JR ...

  5. 501. Find Mode in Binary Search Tree【LeetCode by java】

    Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred ...

  6. "Regressing Robust and Discriminative 3D Morphable Models with a very Deep Neural Network" 解读

    简介:这是一篇17年的CVPR,作者提出使用现有的人脸识别深度神经网络Resnet101来得到一个具有鲁棒性的人脸模型. 原文链接:https://www.researchgate.net/publi ...

  7. Mocha 单元测试框架简介

    前言: mocha是JavaScript的一种单元测试框架,既可以在浏览器环境下运行,也可以在Node.js环境下运行. 使用mocha,我们就只需要专注于编写单元测试本身,然后,让mocha去自动运 ...

  8. Java serialVersionUID作用和生成

    序列化和反序列化Java是面向对象的语言,与其他语言进行交互(比如与前端js进行http通信),需要把对象转化成一种通用的格式比如json(前端显然不认识Java对象),从对象到json字符串的转换, ...

  9. 基于Activiti工作流引擎实现的请假审核流程

    概要 本文档介绍的是某商用中集成的Activiti工作流的部署及使用,该框架用的Activiti版本为5.19.0.本文档中主要以一个请假流程为例子进行说明,该例子的流程图如下: 这是一个可以正常运作 ...

  10. freopen stdout 真的更快?

    freopen stdout 真的更快? 在一次数独作业中,我发现大部分同学提交的代码中都使用 freopen 来将 stdout 重新指向目标文件进行文件输出操作.我感到十分好奇,关于 freope ...