Python_013(面向对象概念)
一.面向对象
1.面向对象几个概念问题:
a:类:具有相同属性和技能的一类事物.用代码表示就是,我类里面有一些静态变量和方法是大家共有的;
b:对象:具体的类的表现.在代码中就是,调用类的方法或变量传入了一些具体数值而创建的实例;
c:实例化:类-->对象这个过程,代码中的表示:类名+(),这个整体叫实例化对象;
2.类的定义:
class Person:
'''类体:两部分:变量部分,方法(函数)部分'''
mind = '有思想' #变量,静态变量,静态字段
animal = '高级动物' def work(self): #方法,函数,动态变量
print('人类都会工作")
def shop(self);
print('人类都会购物')
a:类的定义一般是class 类名:,由静态变量(静态字段)和方法构成;
b:从类的角度:
1)调用类中的静态变量:类名.__dict__查询类中的所有的内容;输出来的格式是字典格式;但不能进行增删改;
2)万能的.:类名.变量;可以增删改查;会直接修改在命名空间内
3):调用类中的方法:类名.方法名(参数),要注意定义类的方法时,方法里有一个self,他就是一个位置参数,如果不传参数,会报错;
工作中基本不用这种方式
c:对象的角度:
1)在类中有一个特殊的函数
class Person:
'''类体:两部分:变量部分,方法(函数)部分'''
mind = '有思想' # 变量,静态变量,静态字段
animal = '高级动物'
faith = '有信仰' def __init__(self,name,age,hobby):
self.name = name # Person.money = '运用货币'
self.age = age
self.hobby = hobby
这里面的__init__(self)函数是类的一个特殊函数,只要类名+()产生了一个对象,自动执行类中的__init__方法;
2)为什么不用传参?
这里面对self讲解一下:这个__init__方法中的self就是把类名+()这个对象本身传给了__init__()函数中的self;
对对象来说,这个是对象的独特的可以调用的函数;初始化对象的一些变量;后面可以方便调用其方法;
#说白了,你的属性可以在任何地方封装,可以在方法里,可以在类中,也可以用对象利用万能的.直接添加,为什么要用__init__
就是为了省代码,在你创建对象时,可以直接传入参数,你调用的所用方法都不用再传了;
3)用函数名+()创建出来对象之后,也可以用__dict__和万能的.对其操作;
二.对象创建示意图
1.
a:从上图我们可以看出:1)步先创建了一块(含有类对象指针的)空间; 2)步这创建的这块空间地址传给__init__中的self;
3)步将传入的参数赋值给__init__函数中self(也就是对象)的变量;
b:需要注意的是,如果对象空间没有这个变量,那它将会通过类对象指针向类中查找,而反过来则不行;
c;总结; 对象.属性:从对象空间找,如果找不到,再从类空间找,再找不到,再从父类找...
类名.属性:先从本类空间找,如果找不到,再从父类找;
2.用计数器记录你的类被别人引用的多少次
class Person:
count = 0
def __init__(self):
Person.count = Person.count+1 #因为每次创建对象,这个函数都会自动执行
def func(self, a, b):
self.a = a
return a * b
def func2(self):
return self.a
ret = Person()
ret = Person()
ret = Person()
print(Person.count)
#输出结果:3
三.类的组合
1.通过两段代码了解类的组合的运用
# 版本一:添加武器:斧子,刀,枪,棍,棒...,
# 代码不合理: 人物利用武器攻击别人,你的动作发起者是人,而不是武器.
class GameRole:
def __init__(self, name, ad, hp):
self.name = name
self.ad = ad
self.hp = hp def attack(self,p):
p.hp = p.hp - self.ad
print('%s 攻击 %s,%s 掉了%s血,还剩%s血' %(self.name,p.name,p.name,self.ad,p.hp)) class Weapon:
def __init__(self,name,ad):
self.name = name
self.ad = ad
def fight(self,p1,p2):
p2.hp = p2.hp - self.ad
print('%s 用%s打了%s,%s 掉了%s血,还剩%s血'\
% (p1.name,self.name,p2.name,p2.name,self.ad,p2.hp)) p1 = GameRole('大阳哥',20,500)
p2 = GameRole('印度阿宁',50,200)
axe = Weapon('三板斧',60)
broadsword = Weapon('屠龙宝刀',100) axe.fight(p1,p2)
broadsword.fight(p2,p1) p1.attack(p2)
#代码不合理之处,谁带上装备发起攻击,调用者肯定是这个谁,而不是这个装备;所以在代码上它是不合理的;
#这里对象就是变量,可以作为参数,也可以进行赋值;
# 版本二:
class GameRole:
def __init__(self, name, ad, hp):
self.name = name
self.ad = ad
self.hp = hp
def attack(self,p):
p.hp = p.hp - self.ad
print('%s 攻击 %s,%s 掉了%s血,还剩%s血' %(self.name,p.name,p.name,self.ad,p.hp))
def armament_weapon(self,wea):
self.wea = wea class Weapon:
def __init__(self,name,ad):
self.name = name
self.ad = ad
def fight(self,p1,p2):
p2.hp = p2.hp - self.ad
print('%s 用%s打了%s,%s 掉了%s血,还剩%s血'\
% (p1.name,self.name,p2.name,p2.name,self.ad,p2.hp)) p1 = GameRole('大阳哥',20,500)
p2 = GameRole('印度阿宁',50,200)
axe = Weapon('三板斧',60)
broadsword = Weapon('屠龙宝刀',100)
p1.armament_weapon(axe) # 给大阳哥 装备了三板斧这个对象.
p1.wea.fight(p1,p2)
#所以类之间的组合就是,你想让谁调用,就给对象所在类创建一个方法,把用来调用其他类所创建的对象;
这里第26行就是把另一类的对象作为参数传给p1,p1再通过27行的形式调用;
Python_013(面向对象概念)的更多相关文章
- delphi 基础之二 面向对象概念初步
面向对象概念初步 •类自动生成 快捷键:ctrl+shift+c 1.类的定义 类是用户创建的数据类型,包括状态.表达式和一些操作.有3个组成部分,即字段.方法和属性.字段是类的内部数据变量,方法就是 ...
- C#入门(面向对象概念)
也许是看概念性的东西太多了,所以一看基本就明白,但实际并没有掌握,有待实操.反而是UML(统一建模语言)引起了我的兴趣,发现这东东很像建筑行业的图纸:有标准和约定,很方便专业人士看懂程序的架构和逻辑. ...
- O-C相关-03:面向对象概念的具体介绍
1.面向对象的概念 面向对象(object-oriented ;简称: OO) 至今还没有统一的概念,我这里把它定义为:按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世 ...
- 《Java从入门到放弃》JavaSE入门篇:面向对象概念(入门版)
要知道什么是面向对象,你首先要有个对象吧,所以······没有对象的可以回家洗洗睡了· 好吧,前面是开玩笑,要说明什么是面向对象,我们还是先 例子: 小呆:"小傻,你今天早餐吃的什么?&qu ...
- 面向对象【day07】:面向对象概念介绍(二)
本节内容 1.概念 2.特性 3.面向对象介绍 一丶概念 1.面向对象编程 OOP(Object-Oriented Programming)编程是利用“类”和“对象”来创建各种模型来实现对真实世界的描 ...
- Python入门之面向对象编程(一)面向对象概念及优点
概念 谈到面向对象,很多程序员会抛出三个词:封装.继承和多态:或者说抽象.一切都是对象之类的话,然而这会让初学者更加疑惑.下面我想通过一个小例子来说明一下 面向对象一般是和面向过程做对比的,下面是一个 ...
- 3-C#面向对象概念
本篇博客对应视频讲解 回顾 前两篇博文带大家快速的感知一下使用C#编写程序是怎样的过程,能实现什么样的功能.同时也提到了面向对象的概念.本篇文章就是更加详细的去将面向对象编程中常见的概念进行示例说明, ...
- Java基础教程(4)--面向对象概念
如果你之前从来没有使用过面向对象编程语言,那么在学习Java之前需要先理解几个有关面向对象编程的基本概念.这篇教程将会向你介绍对象.类.集成.接口和包的概念,以及这些概念是如何与现实世界相关联,并 ...
- java面向对象概念1
一.java面向对象学习的三条主线: 1.java类及类的成员:属性.方法.构造器:代码块.内部类 2.面向对象的三大特征:封装性.继承性.多态性.(抽象性) 3.其它关键字:this.super.s ...
随机推荐
- 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第4节 ArrayList集合_13-ArrayList集合概述和基本使用
新建类 多了个尖括号,大写字母E,这是什么意思呢? 尖括号当中叫做泛型.存储的统一的类型,这个类型就在尖括号里面写上,我们用一个字母占位表示. 如何创建呢 构造方法有三个,最常用的就是无参构造 先掌握 ...
- SpringBoot整合Lintener
1.通过扫描完成Lintener组件的注册 1.1编写Listener /** * springboot整合Lintener 方式一 * 在web.xml中如何配置Listener * <lis ...
- JavaSE编码试题强化练习3
1.给20块钱买可乐,每瓶可乐3块钱,喝完之后退瓶子可以换回1块钱,问最多可以喝到多少瓶可乐. public class TestCirculation { public static void ma ...
- Java程序控制结构
分支结构 循环结构 跳转结构 一.分支结构 概念:程序从两条或多条路径中选择一条去执行,这种结构称为分支结构 1. if结构 特点: ① 条件表达式的形式可以为: boolean的变量 boolean ...
- linux 阿里云 centos7 环境下安装easymock(一)
一.说一说Easy-mock的使用场景和优点:1.Easy Mock 是一个可视化,并且能快速生成 模拟数据 的持久化服务,2.基于 Swagger 创建项目,以节省手动创建接口的时间,这点也是我搭建 ...
- 洛谷 P1462 通往奥格瑞玛的道路(二分答案,堆优化dijkstra)
传送门 解题思路 首先看题目问题,求经过的所有城市中最多的一次收取的费用的最小值是多少.一看“最大值最小”就想到了二分答案. 在读一遍题目,就是二分收取的费用,然后对于每一个二分的费用,跑一边最短路, ...
- python 合并字典/拼接字典
针对于python 3.5以上版本: 最好的最快的最优雅的方法是: result_dict = {**dict_1, **dict_2} 例如:( dict 代表 dictionary,也就是字典) ...
- 2019 Multi-University Training Contest 2 - 1008 - Harmonious Army - 最大流
http://acm.hdu.edu.cn/showproblem.php?pid=6598 一开始就觉得是网络流,但是一直都不会怎么建图. 这里要考虑. 每一组边(u,v,a,b,c)建立如下的连接 ...
- 基于 Python 的自定义分页组件
基于 Python 的自定义分页组件 分页是网页中经常用到的地方,所以将分页功能分出来,作为一个组件可以方便地使用. 分页实际上就是不同的 url ,通过这些 url 获取不同的数据. 业务逻辑简介 ...
- C#中ComboBox动态绑定赋值
http://www.crifan.com/csharp_combobox_data_dynamic_binding/ C#中,已有一个List,想要动态的,绑定到ComboBox中. [解决过程] ...