面向对象Object Oriented\

*概述*

*面向过程*

  1. 分析出解决问题的步骤,然后逐步实现。

例如:婚礼筹办

– 发请柬(选照片、措词、制作)

– 宴席(场地、找厨师、准备桌椅餐具、计划菜品、购买食材)

– 婚礼仪式(定婚礼仪式流程、请主持人)

  1. 公式:程序 = 算法 + 数据结构

  2. 优点:所有环节、细节自己掌控。

  3. 缺点:考虑所有细节,工作量大。

*面向对象*

  1. 找出解决问题的人,然后分配职责。

例如:婚礼筹办

– 发请柬:找摄影公司(拍照片、制作请柬)

– 宴席:找酒店(告诉对方标准、数量、挑选菜品)

– 婚礼仪式:找婚庆公司(对方提供司仪、制定流程、提供设备、帮助执行)

  1. 公式:程序 = 对象 + 交互

  2. 优点

(1) 思想层面:

– 可模拟现实情景,更接近于人类思维。

– 有利于梳理归纳、分析解决问题。

​ (2) 技术层面:

– 高复用:对重复的代码进行封装,提高开发效率。

– 高扩展:增加新的功能,不修改以前的代码。

– 高维护:代码可读性好,逻辑清晰,结构规整。

*类和对象*

  1. 类:一个抽象的概念,即生活中的”类别”。

  2. 对象:类的具体实例,即归属于某个类别的”个体”。

  3. 类是创建对象的”模板”。

– 数据成员:名词类型的状态。

– 方法成员:动词类型的行为。

  1. 类与类行为不同,对象与对象数据不同。

*语法*

*定义类*

  1. 代码

class 类名:

​ “””文档说明”””

​ ``def init(self,参数列表):`

self.实例变量 = 参数

方法成员

  1. 说明

– 类名所有单词首字母大写.

_init_ 也叫构造函数,创建对象时被调用,也可以省略。

– self 变量绑定的是被创建的对象,名称可以随意。

#创建类
class 类名:#类名首字母大写def __init__(self,参数)#数据成员self.数据1=参数#行为成员def 方法名称():方法体#创建对象
变量名=类名(参数)

实例变量

实例变量:实例化对象时,每个对象都会有自己的实例变量,各实例变量之间不影响

  • 在构造函数中定义
  • 实例变量由实例对象修改,类修改实例变量没意义
  • 每个实例对象有一份实例变量
  • 实例变量也可以在创建对象后,用对象名.变量名创建或修改实例变量,但不建议这样做

实例方法

在类中定义的函数

def 方法名(self,参数列表)

类成员

类变量

1.语法:

——定义:在类中,方法外定义的变量

——调用:类名.变量名 不建议通过对象访问类变量

2.说明

——存储在类中,方法区

——只有一份,类变量会被所有对象所共享

3.作用:描述所有对象的共有数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3rbksoub-1630498312070)(C:\Users\13664\AppData\Roaming\Typora\typora-user-images\image-20210829211735894.png)]

类方法

1.语法

——1)定义:

​ @classmethod

​ def 方法名称(cls,参数列表)

​ 方法体

——2)调用:类名.方法名(参数列表) 不建议通过对象访问类方法

2.说明:

​ ——至少有一个形参,第一个形参用于绑定类,一般命名为‘cls’

​ ——使用@classmethod修饰的目的是调用类方法时可以(自动)隐式传递类

​ ——类方法中没有对象地址,因此类方法中不能访问类成员,但实例方法中可以访问类成员

3.作用:操作类变量

实例

class ICBC:"""工商银行"""total_money=100000#创建类方法@classmethoddef add_money(cls):cls.total_money+=100000@classmethoddef print_total_money(cls):print(f"总行还剩{ICBC.total_money}元")print(f"总行还剩{cls.total_money}元")def __init__(self,name,money):self.name=nameself.money=money#表示从总行中扣除当前支行使用的金额ICBC.total_money-=money#创建实例对象
i01=ICBC("a支行",10000)
i02=ICBC("b支行",20000)
print(f"总行还剩{ICBC.total_money}元")#总行还剩70000元
#调用类方法
ICBC.add_money()
ICBC.print_total_money()
#总行还剩170000元
#总行还剩170000元

静态方法

将函数移到方法中就是静态方法

  1. 语法

(1) 定义:

@staticmethod

def 方法名称(参数列表):

​ 方法体

(2) 调用:类名.方法名(参数列表)

不建议通过对象访问静态方法

  1. 说明

– 使用@ staticmethod修饰的目的是该方法不需要隐式传参数。

– 静态方法不能访问实例成员和类成员

  1. 作用:定义常用的工具函数。
class Vetor2:"""二维向量"""def __init__(self,x,y):self.x=xself.y=y#将函数移到方法中就是静态方法@staticmethoddef left():return  Vetor2(0,-1)@staticmethoddef right():return  Vetor2(0,1)p0=Vetor2(1,2)#c创建一个坐标为1,2的二维向量
l01=Vetor2.left()#向左移动一个单位
#进行移动
p0.x+=l01.x
p0.y+=l01.y
print(p0.x,p0.y)#1 1class Double_list_helper:@staticmethoddef get_elements(target,vect_pos,vect_dir,count):"""在二维列表中获取指定位置,指定方向,指定数量的元素:param target: 二维列表:param vect_pos: 指定位置:param vect_dir: 指定方向:param count: 数量:return: 列表"""list_result=[]for i in range(count):vect_pos.x+=vect_dir.xvect_pos.y+=vect_dir.yelemnts=target[vect_pos.x][vect_pos.y]list_result.append(elemnts)return list_resultre=Double_list_helper.get_elements(list01,Vetor2(1,0),Vetor2.right(),3)print(re)#['11', '12', '13']

总结

成员:

实例:对象的数据(变量),对象的行为(方法)

类:类的数据(变量),类的行为(方法)

方法:

实例方法操作实例变量,表示“个体“行为

类方法操作类变量,表示“大家”行为

静态方法不能操作实例变量,或者类方法,但开发过程中以面向对象为基础,所以需要 把面向过程的函数变成静态方法写在类中

例子

"""
定义敌人类
数据:姓名,血量,基础攻击力,防御力
行为:打印个人信息
找到名字为乐芙兰的对象
找到血量为0的对象
计算所有敌人的平均攻击力
删除防御力小于30的敌人
"""
class Enemy:def __init__(self, name, HP, base_damage, defense):self.name=nameself.HP=HPself.base_damage=base_damageself.defense=defensedef print_info(self):#行为:打印个人信息print(f"姓名:{self.name}  血量:{self.HP}  "f"基础攻击力:{self.base_damage}  防御力:{self.defense}")@staticmethoddef find_enemy(list_e):#找到名字为乐芙兰的对象for item in list_e:if item.name == "乐芙兰":return item@staticmethoddef find_death(list_e):#找到血量为0的对象list_d=[]for item in list_e:if item.HP==0:list_d.append(item.name)return list_d@classmethod#计算所有敌人的平均攻击力def average_damage(cls,list_e):sum=0for item in list_e:sum+=item.base_damagereturn sum//len(list_e)@classmethod#删除防御力小于30的敌人def delete(cls,list_e):for i in range(len(list_e)-1,-1,-1):"""倒序删除,因为如果删除对象大于一个,正序删除的话每删除一个会让列表索引向前减一,这样步长会变成2,加入两个要删除的对象在一起,这样只能删除一个而倒序没有这样的bug"""if list_e[i].defense<30:del list_e[i]e1=Enemy("墨菲特",660,65,47)
e2=Enemy("卡兹克",643,72,34)
e3=Enemy("乐芙兰",515,65,24)
e4=Enemy("厄斐琉斯",0,65,34)
e5=Enemy("锤石",549,61,30)
list_enemy=[e1,e2,e3,e4,e5]Enemy.find_enemy(list_enemy).print_info()
print(Enemy.find_death(list_enemy))
print(Enemy.average_damage(list_enemy))Enemy.delete(list_enemy)#打印处理后的所有敌人
for item in list_enemy:item.print_info()

python面向对象---创建类相关推荐

  1. Python 入门 —— Python 面向对象:类的创建及其基本内置方法的使用

    Python 面向对象:类的创建及其基本内置方法的使用 首先了解一下什么是面向对象 面向过程: 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. ...

  2. Lua 面向对象 创建类实例

    Lua 面向对象 创建类实例 面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构 常用的面向对象编程语言:C++.Java.Object-C. ...

  3. Python面向对象编程——类的学习

    面向对象编程     面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向 ...

  4. 4. Python面向对象语法——类的构造函数

    目录 1.  类的构造函数介绍 2.  __init__()的使用说明 3.  代码实例 1.  类的构造函数介绍 类的构造函数用于从类创建实例对象的过程: 类的构造函数为实例对象创建提供了参数输入方 ...

  5. python 面向对象和类

    python 面向对象 面向对象的概念 类和对象 类的构成 类的定义 实列属性 实例方法 魔法方法__init__() 模法方法__str__() 公有和私有 类的继承 面向对象的概念 对于面向过程的 ...

  6. 【轻松学】Python面向对象编程——类的设计、基础语法、继承、多态、类属性和类方法、单例设计

    文章目录 1. 类的设计 大驼峰命名法 1.1 类名的确定 1.2 属性和方法的确定 练习 1.1 练习 1.2 2. 面相对象基础语法 2.1 定义简单的类(只包含方法) 2.1.1 定义只包含方法 ...

  7. PYTHON面向对象(类)

    一.PYTHON面向对象基础 面向对象侧重于对的人,做对的事 1.类和对象的基本概念 类的介绍 对象的介绍 类和对象的关系 2.类的设计基础 类设计的三要素 3.类使用的基本语法 3.1类的定义和使用 ...

  8. Python面向对象—对象|类

    1.对象 说明 (1)英文"Object",表示任意存在的事物. (2)在Python中,一切皆对象,具体的事物.字符串.函数等都是对象,即python天生就是面向对象的. 2.类 ...

  9. python的面向对象中属性和方法默认是-Python 面向对象,类的属性和 类的方法...

    面向对象,类的属性和 类的方法 面向对象 类和对象 Python类定义 类属性 类方法 面向过程和面向对象 面向过程 和 面向对象 编程 面向过程 编程:函数式编程,C程序,shell等 面向对象 编 ...

最新文章

  1. Java课程设计——坦克大战
  2. 配置apache服务器的文件名,apache服务器配置文件名是
  3. 内部体验腾讯负载均衡的新功能
  4. CSDN博客如何转载(技术贴)
  5. C#和Java在重写上的区别
  6. linux用户密码策略求图,Linux用户密码策略
  7. 前端学习(1847)vue之电商管理系统电商系统的功能划分
  8. python正则匹配表达式(2)
  9. 从C语言到C++的进阶之一些C基础上的增强用法(篇五)
  10. 1039. 到底买不买(20)-PAT乙级真题
  11. C++的静态联编和动态联编
  12. 论文赏析【EMNLP19】多粒度自注意力机制(MG-SA)
  13. C/C++ 取整函数ceil(),floor(),向上取整,向下取整
  14. python字符串的基本操作_python-字符串基本操作
  15. Multisim14基本介绍(上)
  16. 个个给力2010年十大国产软件新品回顾
  17. IE6 浏览器常见兼容问题 大汇总(23个)
  18. http解析库http-parser
  19. 淘宝后台添加颜色尺码动态sku
  20. 联想Z5 Pro划时代旗舰发布 屏占比95.06%售价1998元起

热门文章

  1. Android中用Java代码模拟鼠标指针(可显示于整个系统界面之上)
  2. 应用瘦身,加固,友盟数据统计
  3. usim卡如何换nano卡_换手机如何转移通讯录,苹果手机通讯录转移怎么最方便?...
  4. 六:es 的Query DSL
  5. RTMP握手协议及lal RTMP握手实现解析
  6. [pygame] pygame设计联机对战桌游(一)
  7. 『Java安全』Unsafe类
  8. CIHI: 基于聊天功能的概念社交产品
  9. PPPoE 的 基础配置及原理
  10. MongoDB安装配置教程(详细版)