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 面向对象 面向过程的圣墟设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西 优点是:极大的降低 ...
随机推荐
- PHP结合Ueditor并修改图片上传路径 微信小程序 拼接域名显示图片
前言 在使用UEditor编辑器时,一般我们都是需要修改默认的图片上传路径的,下面是我整理好的修改位置和方法供大家参考. 操作 Ueditor PHP版本本身自带了一套上传程序,我们可以在此基础中,找 ...
- python3.6+RF连接mysql
接口自动化中会遇到有操作数据库的动作 目录 1.安装第三方库 2.安装pymysql 3.数据库操作 1.安装第三方库 使用在线安装:pip install robotframework_databa ...
- Dart学习笔记-循环
1.for循环 main() { // for循环 ; i < ; i++) { print(i); // 0,1,2,3,4,5,6,7,8,9 } } 2.while循环 main() { ...
- CentOS 7 Docker 安装
CentOS Docker 安装 Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 本文以 CentOS 7.6 版本 ...
- java:Mybatis框架1(基本配置,log4j,Junit4(单元测试))
1.mybatis01: db.properties: driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test userna ...
- ElasticSearch的中文分词器ik
一.前言 为什么要在elasticsearch中要使用ik这样的中文分词呢,那是因为es提供的分词是英文分词,对于中文的分词就做的非常不好了,因此我们需要一个中文分词器来用于搜索和使用. 二.IK ...
- Docker 容器操作
1. 创建并运行 一个容器 docker run -it --rm centos:latest bash run 运行容器 -it 以交互方式运行容器 --rm 退出容器后删除容器 cen ...
- Linux字符界面字符颜色显示
一.字符颜色 #!/bin/bash #字符颜色显示 #-e:允许echo使用转义 #\033[:开始位 #\033[0m:结束位 #\033等同于\e echo -e "\033[30m黑 ...
- ef core 动态拼接 条件
var sql = new List<string>(); var sqlparams = new List<string>(); ; foreach (var p in ph ...
- OSCHINA 公布 2019 年度最受欢迎中国开源软件
https://www.oschina.net/project 此文章从此处转载:https://www.oschina.net/project/top_cn_2019?utm_source=star ...