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. proftpd启动失败提示unable to determine IP address of “xxx.com”

    proftpd启动失败提示unable to determine IP address of “xxx.com”这种proftpd启动失败的原因是无法解析后面主机的IP地址,解决方法是在DNS列表中增 ...

  2. kali黑客渗透测试基础环境准备

    1.apt-get install python-nmap 2.apt-get install python-setuptools 正在读取软件包列表... 完成 正在分析软件包的依赖关系树      ...

  3. metasploit-smb扫描获取系统信息

    1.msfconsle 2.use auxiliary/scanner/smb/smb_version 3. msf auxiliary(smb_version) > set RHOSTS 17 ...

  4. JAVA 文件读取写入后 md5值不变的方法

    假如我们想把某文件读入 StringBuffer 并写入新文件,新文件md5值需要保持不变(写入新文件后保证和源文件一模一样), 我们就需要在操作 StringBuffer 时附加换行符: Strin ...

  5. R语言学习 第四篇:函数和流程控制

    变量用于临时存储数据,而函数用于操作数据,实现代码的重复使用.在R中,函数只是另一种数据类型的变量,可以被分配,操作,甚至把函数作为参数传递给其他函数.分支控制和循环控制,和通用编程语言的风格很相似, ...

  6. 用Visual Studio2017写C++静态库

    造轮子是一件有趣的事情,VS是一个强大的工具,能胜任超大规模的工程,但是讲真,对不那么大的项目配置起来不是那么友好(网上的其他教程也一点都不友好Orz).这里就展示一下构建一个简单的静态库的正确姿势. ...

  7. flask_admin 笔记五 内置模板设置

    内建模板 Flask-Admin是使用jinja2模板引擎 1)扩展内建的模板 不要完全覆盖内置的模板,最好是扩展它们. 这将使您更容易升级到新的Flask-Admin版本. 在内部,Flask-Ad ...

  8. 软件测试_测试工具_LoadRunner

    最近正在逐步学习软件测试工具的使用,此文章也是用来当做笔记以供记录之用.如有问题,还请多多指出. 安装LoadRunner基本步骤从网上搜索即可找到,特此提供部分链接参考(其中附带软件下载): 1.L ...

  9. Istio 流量治理功能原理与实战

    一.负载均衡算法原理与实战 负载均衡算法(load balancing algorithm),定义了几种基本的流量分发方式,在Istio中共有4种标准负载均衡算法. •Round_Robin: 轮询算 ...

  10. [转]An overview of Openvswitch implementation

    This is NOT a tutorial on how to use openvswitch, this is for developers who want to know the implem ...