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. 【第四课】Linux的基础命令使用

    目录 一.passwd重置密码 二.单用户模式 三.救援模式 四.设置SElinux 五.Linux的常用基础命令详解 5.1.mkdir命令 5.2.ls命令 5.3.cd命令 5.4.chmod命 ...

  2. koa2 入门(1)koa-generator 脚手架和 mongoose 使用

    项目地址:https://github.com/caochangkui/demo/tree/koa2-learn 1 构建项目 1.1 安装koa-generator $ npm install -g ...

  3. 定制 input[type="radio"] 和 input[type="checkbox"] 样式

    表单中,经常会使用到单选按钮和复选框,但是,input[type="radio"] 和 input[type="checkbox"] 的默认样式在不同的浏览器或 ...

  4. 华为手机自带浏览器不支持 ES6 语法

    原文地址:https://caochangkui.github.io/huawei-es6/ 华为手机自带浏览器对 es6 语法的支持度极差,哪怕最新的荣耀10 手机也有该毛病!所以,移动端项目开发中 ...

  5. 如何设计一个异步Web服务——接口部分

    需求比较简单,提供一个异步Web服务供使用者调用.比如说,某应用程序需要批量地给图片加lomo效果.由于加lomo效果这个操作非常消耗CPU资源,所以我们需要把这个加lomo效果的程序逻辑放到一台单独 ...

  6. SpringBoot日记——信息修改PUT篇

    我们常用的功能,除了post和get,还有put和delete,这篇文章就介绍一下这个put的基本用法. 页面跳转和回显 1. 首先,我们之前的页面已经将添加和修改的按钮都做好了,那么如何实现这些按钮 ...

  7. 如何在百度云虚拟机中配置thinkphp5,并且url去掉index.php

    第一步:将public目录下的index.php移到和public同级目录下,[或者直接在public同级目录下新建一个index.php] 第二步:那么这个新的index.php文件的内容如下: & ...

  8. laravel从5.2到5.5从入门到精通视频教程共16套

    laravel从5.2到5.5从入门到精通视频教程共16套,大部分都是实战项目比如P2P.博客.短网址.知乎门户.app软件开发.微信商城实战等 课程目录: 01.Laravel框架从入门到精通02. ...

  9. 【SE】Week2 : 个人博客作业

    1. 是否需要有代码规范 对于是否需要有代码规范,请考虑下列论点并反驳/支持: Statement1 :  这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 这样的 ...

  10. 2013337朱荟潼 Linux第四章读书笔记——进程调度

    第4章 进程调度 0. 总结 调度:调度是一个平衡的过程.一方面,它要保证各个运行的进程能够最大限度的使用CP:另一方面,保证各个进程能公平的使用CPU. 调度功能:决定哪个进程运行以及进程运行多长时 ...