python全栈开发-面向对象-初识
python_16_day
函数总结:
https://www.processon.com/view/link/5b718274e4b0555b39e1055f
面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。
优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可。
缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身。
应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等。
面向对象的程序设计的核心是对象(上帝式思维),要理解对象为何物,必须把自己当成上帝,上帝眼里世间存在的万物皆为对象,不存在的也可以创造出来。面向对象的程序设计好比如来设计西游记,如来要解决的问题是把经书传给东土大唐,如来想了想解决这个问题需要四个人:唐僧,沙和尚,猪八戒,孙悟空,每个人都有各自的特征和技能(这就是对象的概念,特征和技能分别对应对象的属性和方法),然而这并不好玩,于是如来又安排了一群妖魔鬼怪,为了防止师徒四人在取经路上被搞死,又安排了一群神仙保驾护航,这些都是对象。然后取经开始,师徒四人与妖魔鬼怪神仙互相缠斗着直到最后取得真经。如来根本不会管师徒四人按照什么流程去取。
面向对象的程序设计的
优点是:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。
缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法预测最终结果。于是我们经常看到一个游戏人某一参数的修改极有可能导致阴霸的技能出现,一刀砍死3个人,这个游戏就失去平衡。
应用场景:需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方。
在python 中面向对象的程序设计并不是全部。
面向对象编程可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑,从而使团队开发变得更从容。
了解一些名词:类、对象、实例、实例化
类:具有相同属性和技能的一类事物.
人类:
对象: 具体的类的表现,具体的实实在在的一个实例
人是一类,某个人是一个对象.
狗是一类,我家养的旺财是一个对象.
实例化:类——>对象的过程
class Person:
'''类体:两部分:变量部分,方法(函数)部分'''
mind = '有思想' # 变量,静态变量,静态字段
animal = '高级动物'
faith = '有信仰'
def __init__(self):
print(self)
print(666)
def work(self): # 方法,函数,动态变量
print(self)
print('人类都会工作...')
def shop(self):
print('人类可以消费....') # 类名的角度
# 操作类中的静态变量
# 1, Person.__dict__ 查询类中的所有的内容 (不能进行增删改操作)
print(Person.__dict__)
print(Person.__dict__['faith'])
Person.__dict__['mind'] = '无脑'
print(Person.__dict__['mind'])
# 2, 万能的 . 对类中的单个的变量进行增删改查,用 万能的 点
print(Person.mind)
print(Person.animal) # 查
Person.money = '运用货币' # 增
Person.mind = '无脑的' # 改
del Person.mind
print(Person.__dict__) #操作类中的方法 (工作中基本不用类名去操作)
Person.work(111) # 对象的角度
ret = Person() # 类名+()的这个过程:实例化的过程(创建一个对象的过程),
# Person() 实例化对象,实例,对象.
print(ret)
#1,只要类名+() 产生一个对象,自动执行类中的__init__方法.
面向对象-各种角度
作业:
1,完成下列功能:
1.1创建一个人类Person,再类中创建3个静态变量(静态字段)
animal = '高级动物'
soul = '有灵魂'
language = '语言'
1.2在类中定义三个方法,吃饭,睡觉,工作.
1.3在此类中的__init__方法中,给对象封装5个属性:国家,姓名,性别,年龄,身高.
1.4实例化四个人类对象:
第一个人类对象p1属性为:中国,alex,未知,42,175.
第二个人类对象p2属性为:美国,武大,男,35,160.
第三个人类对象p3属性为:你自己定义.
第四个人类对象p4属性为:p1的国籍,p2的名字,p3的性别,p2的年龄,p3 的身高.
1.5 通过p1对象执行吃饭方法,方法里面打印:alex在吃饭.
1.6 通过p2对象执行吃饭方法,方法里面打印:武大在吃饭.
1.7 通过p3对象执行睡觉方法,方法里面打印:(p3对象自己的名字)在吃饭.
1.8 通过p1对象找到Person的静态变量 animal
1.9 通过p2对象找到Person的静态变量 soup
2.0 通过p3对象找到Person的静态变量 language
class Person:
animal = '高级动物'
soul = '有灵魂'
language = '语言' def __init__(self, country, name, sex, age, height):
self.country = country
self.name = name
self.sex = sex
self.age = age
self.height = height def eat(self):
return "%s在吃饭" % self.name def sleep(self):
return '%s在睡觉' % self.name def work(self):
return '%s在工作' % self.name p1 = Person("中国", 'alex', '未知', 42, 175)
p2 = Person("美国", '武大', '男', 35, 160)
p3 = Person('中国', 'corn', '男', 21, 178)
p4 = Person(p1.country, p2.name, p3.sex, p2.age, p3.height) print(p1.eat())
print(p2.eat())
print(p3.eat()) print(p1.animal)
print(p2.soul)
print(p3.language)
作业1
2,通过自己创建类,实例化对象
在终端输出如下信息
小明,10岁,男,上山去砍柴
小明,10岁,男,开车去东北
小明,10岁,男,最爱大保健
老李,90岁,男,上山去砍柴
老李,90岁,男,开车去东北
老李,90岁,男,最爱大保健
老张…
class Hobby: def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
def hobby1(self):
return('%s,%s岁,%s,上山去砍柴' % (self.name,self.age,self.sex))
def hobby2(self):
return('%s,%s岁,%s,开车去东北' % (self.name,self.age,self.sex))
def hobby3(self):
return('%s,%s岁,%s,最爱大保健' % (self.name,self.age,self.sex)) p1 = Hobby("小明",10,'男')
p2 = Hobby('老李',90,'男') print(p1.hobby1())
print(p1.hobby2())
print(p1.hobby3())
print(p2.hobby1())
print(p2.hobby2())
print(p2.hobby3())
作业2
3,模拟英雄联盟写一个游戏人物的类(升级题).
要求:
(1)创建一个 Game_role的类.
(2) 构造方法中给对象封装name,ad(攻击力),hp(血量).三个属性.
(3) 创建一个attack方法,此方法是实例化两个对象,互相攻击的功能:
例: 实例化一个对象 盖伦,ad为10, hp为100
实例化另个一个对象 剑豪 ad为20, hp为80
盖伦通过attack方法攻击剑豪,此方法要完成 '谁攻击谁,谁掉了多少血, 还剩多少血'的提示功能.
class Game_role: def __init__(self,name,ad,hp):
self.name = name
self.ad = ad
self.hp = hp
def attack(self,vicitm):
vicitm.hp = vicitm.hp - self.ad
print( "%s攻击%s,%s掉了%s血,还剩%s血" % (self.name, vicitm.name, vicitm.name, self.ad, vicitm.hp))
p1 = Game_role("盖伦",10,100)
p2 = Game_role('剑豪',20,80) p1.attack(p2)
print(p2.hp)
作业3
2018-07-24 20:02:25
python全栈开发-面向对象-初识的更多相关文章
- python全栈开发-面向对象-初识2
python_17_day 今日主要内容: 1.类空间,对象空间,查询顺序. 2.组合. 1.类空间,对象空间,查询顺序. class Person: animal = '高级动物' soul = ' ...
- Python全栈开发:初识Python
Pythton简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语 ...
- 【python全栈开发】初识python
本人最开始接触python是在2013年接触,写过hello word!在此之前对开发类没有多大兴趣,不知道重要性,属于浑浑噩噩,忙忙乎乎,跌跌撞撞的.随后选择了Linux运维作为就业主攻方向. 经过 ...
- python全栈开发-面向对象-进阶2
python_day_19 今日主要内容: 1.抽象类,接口类 2.多态 3.封装 1.抽象类,接口类 python 没有接口这个概念接口类,抽象类: 制定一个规范. 举个栗子:你的项目经理提一个需求 ...
- python全栈开发-面向对象-进阶
python_day_18 1,面向对象的三大特性是什么?继承,多态,封装2,什么是面向对象的新式类?什么是经典类?凡是继承object类都是新式类.凡是不继承object类都是经典类.3,面向对象为 ...
- 巨蟒python全栈开发django2:初识django
今日内容大纲: 1.起飞版web框架 2.自定制框架的流程 3.jinja2模板渲染初识 4.MVC&&MTV 5.django版本介绍及django安装 6.django初识(一些操 ...
- Python全栈开发【面向对象进阶】
Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...
- Python全栈开发【面向对象】
Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...
- python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)
昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...
随机推荐
- Android绘图机制和处理技巧
色彩特效处理 在色彩处理中,使用以下三个角度来描述一个图像. 色调: 物体传播的颜色 饱和度: 颜色的纯度, 从0(灰)到100%(饱和)来进行描述 亮度: 颜色的相对明暗程度 在Android中, ...
- 项目所有的证书文件路径iOS
~/Library/MobileDevice/Provisioning Profiles
- 【luogu P3953 逛公园】 题解
题目链接:https://www.luogu.org/problemnew/show/P3953 题外话:感觉2017年神题好多..这还不是最神的一道,真在考场上我也就写个最短路计数暴力了.现在在大佬 ...
- CC2640R2F&TI-RTOS 拿到 TI CC2640R2F 开发板 第一件事就是移植串口驱动,重定向 printf
/* * board_uart.c * * Created on: 2018年7月3日 * Author: admin */ #include "board_uart.h" #in ...
- C#中如果用await关键字来await一个为null的Task对象会抛出异常
await & async模式是C#中一个很重要的特性,可以用来提高异步程序(多线程程序)的执行效率.但是如果尝试用await关键字来await一个为null的Task对象,会导致程序抛出Nu ...
- zookeeper启动时报错:Error contacting service. It is probably not running问题
查看zookeeper.out发现启动日志报错未找到java路径. 启动日志位于zookeeper-4.0.10/bin目录下 修改/etc/profile中环境变量得以解决.
- c/s和b/s结构的区别
c/s结构 1.创建Client 2.设计服务器Server 3.设计私有通讯协议 4.随着功能的升级,安装了客户端程序的计算,要不升级最新版 b/s结构 1.浏览器代替客户端 2.服务器(协议教会, ...
- UIImage指定区域自由拉伸
UIImage的 resizableImageWithCapInsets 可以指定需要拉伸的位置,这个方法很有用,可以减少长短按钮数量
- Knowledge-Reserve
Knowledge-Reserve ComputerOperatingSystem 编译 静态库&动态库(Linux) 静态链接&动态链接 内存 内联函数&宏 Static&a ...
- 搭建Java的运行和开发环境
Java最大的优势就是跨平台,即编译一次,就能在linux.windows和mac等平台运行,无需再次编译.而典型的C和C++ 则是源代码跨平台,需要根据不同平台的编译规范来进行编译. Java如何跨 ...