第二十九章 面向对象(Python)

文章目录

  • 一、面向过程
  • 二、面向对象
    • 1、对象
    • 2、类
    • 3、类与对象的关系


一、面向过程

面向过程编程(POP):按照业务逻辑从上到下设计程序的方式。 特点: 用一长段代码来实现指定功能,一步接一步,环环相扣。 缺点: 但是大型项目,如果使用面向过程编程,则很容易导致代码结构过于紧密、耦合度高,易出现代码冗余,不利于并且团队开发。

二、面向对象

面向对象编程 (OOP):将具有相关性的数据/行为封装成整体(对象),以整体的角度来完成处理 特点: 将数据和业务抽象为对象,有利于程序整体结构的分析和设计,使设计思路更加清晰 业务以对象为单位,对象各自完成工作,减少了代码耦合度,有助于业务升级和代码重构 方便工作划分,有利于提高团队开发的效率。

1、对象

是记录数据,完成行为的一个具体"事物"。比如具体某一个人 对象的组成: 属性: 用于记录与对象相关的数据,比如姓名,年龄等 方法: 用于实现与对象相关的操作,比如吃饭,睡觉等。

2、类

类(class):描述具有共同特征的事物的概念。物以类聚,人以群分。很多事物存在相同的操作/行为,比如人都进行吃饭、睡觉,狗都会跑会叫等等。

3、类与对象的关系

区分:类是总结事物特征的抽象概念,而对象是具体存在的实物某个。 关系:在编程中,类就是创建对象的制造手册,用来定义对象的行为。每个对象必须有一个对应的类。

'''
class 类名:方法列表
'''class dog:def __init__(self, type):'''如何让创建出来的对象包含一些默认属性,并且有初始值?__init__()方法叫做对象的初始化方法,在创建一个对象后会被自动调用,不需要手动调用开发者可以实现init方法,并在该方法中定义属性并设置初始值自定义__init__()__init__(self)除了参数,还可以设置任意个数的自定义参数,例如self__init__(self,x,y,z)init方法设置的自定义参数必须和创建对象时传递的参数保持一致,例如tom = Cat(x,y,z)'''self.age = 1  # 设置默认值狗的年龄self.type = typedef __str__(self):'''如果直接打印对象,会看到创建出来的对象在内存中的地址使用print输出对象的时候,只要对象定义了方法,就会打印该方法return的信息描述字符串符的返回值必须是字符串类型:return:'''return "名字是:%s,年龄是:%s" % (self.name, self.age)def eat(self):  # self对应的实参就是调用该方法的对象,self主要用于在方法中使用自己的属性和方法print("狗吃骨头,它的名字是:%s" % self.name)print("它的年龄是:%d" % self.age)print("它是:%s" % self.type)dog1 = dog("小型犬")  # 创建对象,格式:引用对象的变量名 = 类名()
dog1.name = "来福"  # 定义属性,格式:引用对象的变量名.属性名 = 数据
print(dog1.name)
dog1.eat()  # 调用方法,格式:引用对象的变量名.方法名()
print(dog1)
'''
面向其对象: 搬家具
搬家具规则:1.家具分不同的类型,并占用不同的面积
2.家具显示信息时,显示家具的类型和家具占用的面积
3.房子有自己的地址和占用的面积
4.房子可以添加家具,如果房子的剩余面积可以用着,则提示家具添加成功;否则提示添加失败
5.输出房子信息时,可以显示房子的地址、被面积、剩余面积
6.需求:输出房子时,显示包含的所有家具的类型
两个类:房子和家具房子:属性:地址面积方法:添加家具可以添加家具,房子剩余面积不可以添加家具,提醒添加失败
家具:属性:家具的类型家具占用的面积方法:
'''class home:def __init__(self, mj, symj):self.dz = "上海市"self.mj = mjself.symj = symjself.list = []def __str__(self):return "家庭地址:%s,家庭面积:%d,家庭剩余面积:%s,家具有:%s" % (self.dz, self.mj, self.symj, self.list)def addjj(self, jj):self.symj = self.symj - jj.jjmjif self.symj > 0:print("家具:%s添加成功,面积:%d!,房子剩余面积:%d" % (jj.jj_type, jj.jjmj, self.symj))self.list.append(jj.jj_type)else:print("添加失败!")class jj:def __init__(self, jj_type, jjmj):self.jj_type = jj_typeself.jjmj = jjmjdef __str__(self):return "家具的类型:%s,家具面积:%d" % (self.jj_type, self.jjmj)fz = home(1000, 1000)
bx = jj("冰箱", 100)
fz.addjj(bx)
print(fz)
class Animal:Animal_type = "动物"  # 类属性,类对象所拥有的属性,它被该类的所有实例对象所共有。类属性可以使用类对象或实例的访问,类属性也可以设置为私有,前边添加两个下划线def __init__(self):  # 父类中的私有方法、属性,不会被子类继承,可以通过调用继承的父类的共有方法,间接的访问父类的私有方法、属性self.__name = "犬"self.height = 100def __ss(self):print("死")def eat(self):print("吃东西")self.__ss()  # 可以通过调用继承的父类的共有方法,间接的访问父类的私有方法print(self.__name)# 类方法,用classmethod来进行修饰,对象方法必须有实例对象才能调用,而类方法可以用类对象/实例对象 来调用@classmethod  # 可以在没有实例对象的,完成类属性的处理def get_type(cls):return cls.Animal_type# 静态方法,取消不需要参数的传递,有利于减少不必要的内存占用和性能消耗@staticmethoddef introduce():  # 静态方法不会自动传递实例对象和类对象,静态方法 也能够通过实例对象和类对象去访问。print("犬科哺乳动物,属于食肉目..")class work:def run(self):print("跑")class Dog(Animal, work):  # 继承类Animal所有的属性和方法,多继承Animal和workdef __init__(self):  # 可以认为是重写父类__init__方法self.__baby_count = 0super().__init__()  # 调用父类属性def __str__(self):return "我有%d个崽儿" % self.__baby_countdef birth(self):"""生育"""print("生了一个崽儿")print(self.height)self.__baby_count += 1self.__leave()def __leave(self):"""产假"""print("休3个月产假")def run(self):print("使劲跑")# def eat(self):  # 当子类实现一个和父类同名的方法时,叫做重写父类方法,子类重写了父类方法,子类再调用该方法将不会执行父类的处理#     print("使劲吃")#     super().eat()  # 最好用的,子类重写了父类方法,仍然想执行父类中的方法,则可以在类中使用来调用方法super()class tuzi(Animal):  ## 在不改变原run方法的情况下, 让不同动物做不同的动作def run(self):print("跳")dog1 = Dog()  # dog1,通过类创建的对象 又称为实例对象,对象属性又实例属性,记录对象各自的数据,不同对象的同名实例属性,记录的数据可能各不相同
dog1.eat()
dog1.run()
# dog1.__ss()# 父类中的私有方法无法被继承
# print(dog1.__baby_count)  #错误无法通过对象直接调用私有属性
# dog1.__leave()    # 无法通过对象直接调用私有方法'''
私有方法和私有属性只能通过类的内部间接调用,比如brith方法,而无法直接用类的对象直接调用。
'''dog1.birth()
print(dog1)tz = tuzi()
tz.run()print(Animal.Animal_type)  # 类属性可以使用类对象或实例的访问print(Animal.get_type())  # 类方法可以直接用类对象调用
d = Animal()
print(d.get_type())  # 也可以用实列对象调用Animal.introduce()
d1 = Animal()
d1.introduce()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/865812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Element中的消息提示组件Message和弹框组件MessageBox

简述:在 Element UI 中,Message和MessageBox都是比较常用的组件,Message用来提示消息,而MessageBox是一个用于创建模态对话框的组件。它可以用于在页面上快速展示信息、警告或错误提示,而不会阻止用户的其他操作。简单…

116-基于5VLX110T FPGA FMC接口功能验证6U CPCI平台

一、板卡概述 本板卡是Xilinx公司芯片V5系列芯片设计信号处理板卡。由一片Xilinx公司的XC5VLX110T-1FF1136 / XC5VSX95T-1FF1136 / XC5VFX70T-1FF1136芯片组成。FPGA接1片DDR2内存条 2GB,32MB Nor flash存储器,用于存储程序。外扩 SATA、PCI、PCI expres…

【期末复习】数据库系统概论(附带考点汇总)

第1章.绪论 目录 第1章.绪论1.1. 数据库系统概述1.1.1.基本概念1.1.2.产生和发展 1.2.概念模型1.2.1.三种模型1.2.2.概念模型1.2.3.关系模型 1.3.数据库系统结构1.3.1三级模式结构1.3.2.两级映像与数据独立性 第2章.关系型数据库2.1.关系2.2.关系操作2.2.1.基本关系操作2.2.2.关…

SALOME源码分析:View Model

作为一款开源的CAx(CAD/CAE/CAM)软件集成平台,为了实现各个Module支持不同的数据显示与交互方案,出于扩展性的考虑,SALOME引入了View Model,用以支持OpenGL、OCC、VTK、ParaView、Qwt等数据显示与交互实现。 本文将以OCCViewer、…

昇思25天学习打卡营第16天|Diffusion扩散模型

导入必要的库函数 import math from functools import partial %matplotlib inline import matplotlib.pyplot as plt from tqdm.auto import tqdm import numpy as np from multiprocessing import cpu_count from download import downloadimport mindspore as ms import mi…

Python基于卷积神经网络分类模型(CNN分类算法)实现时装类别识别项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 在深度学习领域,卷积神经网络(Convolutional Neural Networks, CNNs&#xff0…

【架构-20】死锁

什么是死锁? 死锁(Deadlock)是指两个或多个线程/进程在执行过程中,由于资源的互相占用和等待,而陷入一种互相等待的僵局,无法继续往下执行的情况。 产生死锁的四个必要条件: (1)互斥条件(Mutual Exclusion):至少有一个资源是非共享…

Elasticsearch:结合稀疏、密集和地理字段

作者:来自 Elastic Madhusudhan Konda 如何以自定义方式组合多个稀疏、密集和地理字段 Elasticsearch 是一款强大的工具,可用于近乎实时地搜索和分析数据。作为开发人员,我们经常会遇到包含各种不同字段的数据集。有些字段是必填字段&#x…

relation-graph——数据组装+鼠标移入后的详情(自定义插槽的用法)——js技能提升

最近在写后台管理系统的时候,遇到一个需求,就是给我一些节点,让我渲染到页面上,效果图如下: 之前写过一篇文章关于relation-graph关系图组件http://t.csdnimg.cn/7BGYm的用法 还有一篇关于relation-graph——实现右击…

回溯算法-以单位人事管理系统为例

1.回溯算法介绍 1.来源 回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。 用回溯算法解决问题的一般步骤: 1、 针对所给问题,定义问题的解空间,它至少包含问题的一个(最优)解。 2 、确定易于搜…

rk3568 OpenHarmony 串口uart与电脑通讯开发案例

一、需求描述: rk3568开发板运行OpenHarmony4.0,通过开发板上的uart串口与电脑进行通讯,相互收发字符串。 二、案例展示 1、开发环境: (1)rk3568开发板 (2)系统:OpenHar…

又一个被催的相亲对象!家庭不和,是因为智慧不够?——早读(逆天打工人爬取热门微信文章解读)

你相亲过吗? 引言Python 代码第一篇 洞见 家庭不和,是因为智慧不够第二篇 口播结尾 引言 yue 昨天居然忘记了 正事:拍视频j 居然忘记了 别着急 让我找下理由(借口) 前天我妈给我介绍了个相亲对象 推给我了她的微信 我…

网络攻防——kali操作系统基本使用

1.阅读前的声明 本文章中生成的木马带有一定的攻击性,使用时请遵守网络安全相关的法律法规(恶意攻击操作系统属于违法行为)。 2.环境安装 生成木马主要需要如下工具:kali操作系统,VMware15(搭建kali操作…

Beyond Compare 解锁版下载及安装教程 (文件和文件夹比较工具)

前言 Beyond Compare 是一款功能强大的文件和文件夹比较工具。它支持文件夹比较、文件夹合并与同步、文本比较、表格比较、图片比较、16进制比较、注册表比较、版本比较等多种功能。通过 Beyond Compare,您可以轻松调查文件和文件夹之间的不同之处,并使…

【Qwen2部署实战】探索Qwen2-7B:通过FastApi框架实现API的部署与调用

系列篇章💥 No.文章1【Qwen部署实战】探索Qwen-7B-Chat:阿里云大型语言模型的对话实践2【Qwen2部署实战】Qwen2初体验:用Transformers打造智能聊天机器人3【Qwen2部署实战】探索Qwen2-7B:通过FastApi框架实现API的部署与调用4【Q…

电脑恢复技巧:如何在 Windows 10 中恢复删除的文件夹

丢失文件和文件夹是一件非常可怕的事情,尤其是当你不知情的情况下删除它们时。别撒谎。我们知道你也经历过这种情况,而且你也知道我们在说什么! 我们都曾有过这样的经历,而且大多数人很快就会再次经历。在 Windows 中&#xff0c…

从内外参推导IPM变换方程及代码实现(生成AVM环视拼接图)

一、前言 最近想实现AVM拼接,看了不少博客和论文,不过比较愚钝,一直没能很好理解原理,尤其是怎么在实现时把下文式1与式2中Z1和Z2消除的,所以严谨的推导了一下对应的公式,如有不对,水平有限&am…

Qt Group与华为合作开发OpenHarmony版本,打造无缝跨设备操作系统

在华为开发者大会2024上,跨平台软件开发和质量保证工具的领先供应商 Qt Group(Nasdaq, Helsinki: QTCOM)荣幸地宣布成为OpenHarmony生态系统合作伙伴。这是继近几年华为采用Qt开发框架和自动化测试工具Squish的商业许可后,Qt Grou…

Elasticsearch集群部署(下)

目录 上篇:Elasticsearch集群部署(上)-CSDN博客 七. Filebeat 部署 八. 部署Kafka 九. 集群测试 链接:https://pan.baidu.com/s/1AFXSmDdY5xBb7g35ipKoaw?pwdfa9m 提取码:fa9m 七. Filebeat 部署 为什么用 F…

搭建基础库~

前言 项目中会用到工具库、函数库以及一些跟框架绑定的组件,如果这些基础模块每个项目都实现一套,维护起来那真的头大,你说呢😉 搭建流程 准备工作 创建文件夹myLib、安装Git以及pnpm 目录大概就系这样子: myLib ├…