初始面向对象

一、面向过程:面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。

优点:极大地降低了写成学的复杂度,只需要顺着执行的步骤,堆叠代码即可

缺点:一套流水线或者流程就是用来解决一个问题,如果修改代码就都得改变

二、面向对象:上帝的思想

优点:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。

缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法预测最终结果。于是我们经常看到一个游戏人某一参数的修改极有可能导致阴霸的技能出现,一刀砍死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之面向对象之初识面向对象的更多相关文章

  1. python学习日记(初识面向对象)

    面向过程 VS 面向对象 面向过程 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行.为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统 ...

  2. python学习笔记六 初识面向对象上(基础篇)

    python面向对象   面向对象编程(Object-Oriented Programming )介绍   对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,虽然大家都知道OOP的三大特性 ...

  3. python 面向对象(一)初识面向对象

    ##################################总结#################### 1. 面向过程:一切以事物的发展流程为中心 面向对象:一切以对象为中心,一切皆为对向, ...

  4. 巨蟒python全栈开发-第16天 核能来袭-初识面向对象

    一.今日内容总览(上帝视角,大象自己进冰箱,控制时机) #转换思想(从面向过程到面向对象) 1.初识面向对象 面向过程: 一切以事物的发展流程为中心. 面向对象: 一切以对象为中心,一切皆为对象,具体 ...

  5. python - 初识面向对象

    1.初识面向对象       面向过程:一切以事务的发展流程为中心           优点:负责的问题流程化,编写相对简单         缺点:可扩展性差,只能解决一个问题,改造也会很困难,牵一发 ...

  6. python之路--初识面向对象

    一 . 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大 ...

  7. python 全栈开发,Day19(组合,组合实例,初识面向对象小结,初识继承)

    一.组合 表示的一种什么有什么的关系 先来说一下,__init__的作用 class Dog: def __init__(self, name, kind, hp, ad): self.name = ...

  8. python基础(23):面向过程与面向对象的优劣、初识面向对象

    1. 面向过程与面向对象的优劣 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程 ...

  9. Python初识面向对象

    初识面向对象 面向过程 VS 面向对象 面向过程的圣墟设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西 优点是:极大的降低 ...

随机推荐

  1. JavaScript日常学习4

    JavaScript事件 1.<button id="btn1" onclick="document.getElementById("btn1" ...

  2. 【汇总】PHP 伪协议 利用

    日期:2019-07-28 21:24:36 更新: 作者:Bay0net 介绍: 0x01.基本信息 文件包含函数 include() require() include_once() requir ...

  3. 安装SQL Server 2008反复提示需要安装MICROSOFT NET FRAMEWORK 3 5 SP1的一个

    在安装过.net  framework 4的系统中,安装sql server 2008的安装前提之一MICROSOFT .NET FRAMEWORK 3.5 SP1时,可能已经安装并重启了,还是提示安 ...

  4. vsftp新建用户及目录时遇到的坑

    1.有关vsftp配置及用户权限设置,请参考: http://blog.sina.com.cn/s/blog_3edc5e2e0102vzv8.html 2.需求:公司另一部门要求单独建一目录,来存在 ...

  5. USACO2.1 Hamming Codes【枚举+二进制处理+输出格式+题意理解】

    这道题加了2个看起来奇奇怪怪的$tag$ 1.输出格式:不得不说这个格式输出很恶心,很像$UVA$的风格,细节稍微处理不好就会出错. 因为这个还$WA$了一次: ,m=n; ) { ;i<=t+ ...

  6. 【Qt开发】 数字转QString格式化

    1 想要获得001 002 这样的数字 QString b=QString("%1").arg(i, 3, 10, QChar('0')); QStringList list;   ...

  7. 【Qt开发】QString与数字类型的转换(不同进制)

    把QString转换为 double类型 方法1.QString str="123.45"; double val=str.toDouble(); //val=123.45 方法2 ...

  8. mysql——前面内容——前期整理笔记00

    ), sname ), sage ), ssex ) ); ','zhaolei','1990-01-01','nan'); ','qiandian','1990-12-21','nan'); ',' ...

  9. python 并发编程 io模型 目录

    python 并发编程 IO模型介绍 python 并发编程 socket 服务端 客户端 阻塞io行为 python 并发编程 阻塞IO模型 python 并发编程 非阻塞IO模型 python 并 ...

  10. spark 常用设置

    1.spark.hadoop.validateOutputSpecs 若设置为true,saveAsHadoopFile会验证输出目录是否存在.虽然设为false可直接覆盖文件路径