Python之面向对象之初识面向对象
初始面向对象
一、面向过程:面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。
优点:极大地降低了写成学的复杂度,只需要顺着执行的步骤,堆叠代码即可
缺点:一套流水线或者流程就是用来解决一个问题,如果修改代码就都得改变
二、面向对象:上帝的思想
优点:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。
缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法预测最终结果。于是我们经常看到一个游戏人某一参数的修改极有可能导致阴霸的技能出现,一刀砍死3个人,这个游戏就失去平衡。
三、类:是具有相同特征的一类事物(人,狗,老虎)
对象/实例:具体的某一事物
实例化:类到对象的过程(实例=类名(参数1,参数2))
四、初始类和对象
类的定义:class Person: #class 类名:注意类名后面不要括号
类体
在python中,用变量表示特征,用函数表示技能,因而具有相同的特征和技能的一类事物就是‘类’,
对象则是这一类事物中具体的一个
类的两种作用:属性引用和实例化
1 class Person:
2 role = '中国人' #类属性----静态属性
3 def walk(self): #这里的函数叫做方法-----动态属性
4 #注意:self必须写
5 print('person is walking ...')
6 print(Person.role) #查看类属性
7 print(Person.walk) #查看类方法 , 用类名去调用方法名,打印出来的是内存地址
属性引用
1 class Person:
2 role = '中国人'
3 def __init__(self,name,sex):
4 self.name=name
5 self.sex=sex
6 def walk(self):
7 print('person is walking')
8
9 hy = Person('haiyan',21) #实例化:类名(参数1,参数2) 类名()就等于在执行Person.__init__()
10 print(hy.name) #直接查看属性 对象名.属性名
11 print(hy) #返回的是一个对象
12 hy.walk() #调用方法 ,对象名.方法()
实例化
对象的两种作用:查看属性和调用方法(咋上面的实例化中讲到)
五、关于self
self:在实例化时自动将对象/实例本身传给__init__的第一个参数,你也可以给它起个别的名字,但是一般正常人都不会这么做,因为你改了别人就不认识了。
注意:def __init__(self): 这句话可以写也可以不写,只要有参数参进来的时候就必须得写
def 方法名(self):这里的self必须得写
六、特殊的类属性
1 print(Person.__name__,type(Person.__name__)) #查看类的名字(这里的类名是字符串类型的)
2 print(Person.__dict__) #查出的是一个字典,key为属性名,value为属性值
3 print(Person.__doc__)# 就是把注释显示出来
4 print(dir(Person)) #查看类的方法,以列表的形式显示出来
5 print(Person.__module__) #类定义所在的模块
6 print(Person.__class__)
7 print(isinstance(hy,Person))#判断对象 是否是类的实例
七、对象的相关知识
1.对象是关于类而实际存在的一个例子,即实例
2.对象/实例只有一种作用:属性引用
1
2
3
4
|
egg = Person( 'egon' , 10 , 1000 ) print (egg.name) print (egg.aggressivity) print (egg.life_value)<br>当然,你也可以引用一个方法,因为方法也是一个属性。 |
八、面向对象小结
定义及调用的固定格式
1 class 类名:
2 def __init__(self,参数1,参数2):
3 self.对象的属性1 = 参数1
4 self.对象的属性2 = 参数2
5
6 def 方法名(self):pass
7
8 def 方法名2(self):pass
9
10 对象名 = 类名(1,2) #对象就是实例,代表一个具体的东西
11 #类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法
12 #括号里传参数,参数不需要传self,其他与init中的形参一一对应
13 #结果返回一个对象
14 对象名.对象的属性1 #查看对象的属性,直接用 对象名.属性名 即可
15 对象名.方法名() #调用类中的方法,直接用 对象名.方法名() 即可
16
17 小结
九、对象之间的交互
1 class Person:
2 def __init__(self,name,aggr,life_value):
3 self.name=name
4 self.aggr=aggr
5 self.life_value=life_value
6 def attack(self,dog): #人可以攻击狗
7 dog.life_value=dog.life_value-self.aggr
8 class Dog:
9 def __init__(self,name,aggr,life_value):
10 self.name = name
11 self.aggr = aggr
12 self.life_value = life_value
13
14 def attack(self,egg): #狗也可以攻击人
15 egg.life_value = egg.life_value - self.aggr
16 egg = Person('egon',250,1000)
17 dog = Dog('乐乐',50,2000)
18 print('狗没攻击前egon的生命值:',dog.life_value) #没攻击前egon的生命值
19 egg.attack(dog) #让egon去攻击狗乐乐
20 print('狗攻击后egon的生命值:',dog.life_value) #攻击后egon的生命值
21
22
23 print('egon没攻击前狗的生命值:',egg.life_value) #没攻击前egon的生命值
24 dog.attack(egg) #让狗去攻击egon
25 print('egon攻击后狗的生命值:',egg.life_value) #攻击后egon的生命值
人狗大战小程序
十、类命名空间与对象,实例的命名空间
创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字成为类的属性
而类有两种属性:静态属性和动态属性
- 静态属性就是直接在类中定义的变量
- 动态属性就是定义在类中的方法
Python之面向对象之初识面向对象的更多相关文章
- python学习日记(初识面向对象)
面向过程 VS 面向对象 面向过程 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行.为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统 ...
- python学习笔记六 初识面向对象上(基础篇)
python面向对象 面向对象编程(Object-Oriented Programming )介绍 对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,虽然大家都知道OOP的三大特性 ...
- python 面向对象(一)初识面向对象
##################################总结#################### 1. 面向过程:一切以事物的发展流程为中心 面向对象:一切以对象为中心,一切皆为对向, ...
- 巨蟒python全栈开发-第16天 核能来袭-初识面向对象
一.今日内容总览(上帝视角,大象自己进冰箱,控制时机) #转换思想(从面向过程到面向对象) 1.初识面向对象 面向过程: 一切以事物的发展流程为中心. 面向对象: 一切以对象为中心,一切皆为对象,具体 ...
- python - 初识面向对象
1.初识面向对象 面向过程:一切以事务的发展流程为中心 优点:负责的问题流程化,编写相对简单 缺点:可扩展性差,只能解决一个问题,改造也会很困难,牵一发 ...
- python之路--初识面向对象
一 . 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大 ...
- python 全栈开发,Day19(组合,组合实例,初识面向对象小结,初识继承)
一.组合 表示的一种什么有什么的关系 先来说一下,__init__的作用 class Dog: def __init__(self, name, kind, hp, ad): self.name = ...
- python基础(23):面向过程与面向对象的优劣、初识面向对象
1. 面向过程与面向对象的优劣 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程 ...
- Python初识面向对象
初识面向对象 面向过程 VS 面向对象 面向过程的圣墟设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西 优点是:极大的降低 ...
随机推荐
- web开发(六) EL表达式
在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6432044.html>,在此仅供学习参考之用. 一.EL ...
- JavaScript日常学习5
JavaScript字符串属性和方法 eg :var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var sln = txt.length; ...
- LoadRunner 技巧之 脚本设计
LoadRunner 技巧之 脚本设计 在做性能测试时,我们可能会遇到各种不同的业务需求与用户行为,在一个系统或网站中,每个用户的操作都不完全一样.我们如何来模拟这此用户的行为?经验与能力有限,我这里 ...
- 【VS开发】cmd dos 批处理重命名文件
原文地址:http://hi.baidu.com/benchoi/item/c1f531f5f1367b0b85d2785b 批处理实现文件批量重命名并自动加递增序列号 有时我们想把一些图片批量重命名 ...
- python 并发编程 协程池
协程池 from gevent.pool import Pool from gevent import monkey;monkey.patch_all() import gevent from gev ...
- HDU 1069 Monkey and Banana (动态规划、上升子序列最大和)
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- Python新手练手项目
1.新手练手项目集中推荐 https://zhuanlan.zhihu.com/p/22164270 2.Python学习网站 https://www.shiyanlou.com 3.数据结构可视化学 ...
- Spring(三)--Spring bean的生命周期
Spring bean的生命周期 ApplicationContext Bean生命周期流程 1.需要的实体类 ackage com.xdf.bean; import org.springframew ...
- 牛逼哄洪的 Java 8 Stream,性能也牛逼么?
那么,Stream API的性能到底如何呢,代码整洁的背后是否意味着性能的损耗呢?本文对Stream API的性能一探究竟. 为保证测试结果真实可信,我们将JVM运行在 -server模式下,测试数据 ...
- Bug快到碗里来
Bug快到碗里来 python错误--'list' object is not callable 原因及解决方法1 你定义了一个变量的变量名和系统自带的关键字冲突,调用变量时关键字被传到调用的位置,就 ...