1.10 类、方法、封装、继承、多态、装饰器

一、介绍类

类(class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例

实例化:创建一个类的实例,类的具体对象。

对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法

方法:类中定义的函数

类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。

类变量通常不作为实例变量使用。

实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。

继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)

"关系(例图,Dog是一个Animal)。方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写

=====================================

二、定义类

(1)class  关键字 声明一个类

(2)class  类定义方法

第一种:class  类名(object):     新式类

第二种:class  类名():

第三种:class 类名

(3)案例

class Hz(object):def __init__(self,name,age): #构造函数self.name=name   #实例变量self.age=age     # #实例变量def a(self):  #创建一个函数, 也叫方法print(self.name+"砍柴")def b(self):print("你们都是"+self.age)
if __name__ == '__main__':d=Hz("zt","18")  # 创建类的对象d.a()d.b()
(4)————init————初始化文件构造函数

1、定义类的时候__init__是一个构造函数,该函数是两个下划线开头和两个下划线结束,其作用就是当创建类的对象和实例时系统会自动调用构造函数,通过构造函数对类进行初始化操作

2、定义类的时候__init__方法中有一个参数self,这也是类中的方法与普通函数的区别,类的中的方法必须有一个参数self,而且位于参数列表的开头,在类中self就是代表类的当前类的实例(对象)自身,在python调用时无需传值,python会将对象自动传给self接受

===========================

三、类中的类变量、实例变量

1、类变量在类的下方,构造函数的上方

2、实例变量在构造函数的下方 self.开头

 ===========================

类中的实例方法、动态方法、静态方法

(1)实例方法:

class Hz(object):name="jz" #类变量def __init__(self,name,age): #构造函数self.name=name   #实例变量self.age=age     # #实例变量def a(self):  #创建一个函数, 也叫方法print(self.name+"砍柴")def b(self):print("你们都是"+self.age)
if __name__ == '__main__':d=Hz("zt","18")  # 创建类的对象d.a()d.b()

(2)动态方法(也叫类方法)

class Hz(object):name="jz" #类变量def __init__(self,name,age): #构造函数self.name=name   #实例变量self.age=age     # #实例变量def a(self):  #创建一个函数, 也叫方法print(self.name+"砍柴")def b(self):print("你们都是"+self.age)@classmethoddef d(cls):print(cls.name)
if __name__ == '__main__':d=Hz("zt","18")  # 创建类的对象d.d()(3)静态方法(私有方法),装饰器
class Hz(object):name="jz" #类变量def __init__(self,name,age): #构造函数self.name=name   #实例变量self.age=age     # #实例变量def a(self):  #创建一个函数, 也叫方法print(self.name+"砍柴")def b(self):print("你们都是"+self.age)@classmethoddef d(cls):print(cls.name)@staticmethoddef sy(name):print("私有方法"+name)
if __name__ == '__main__':d=Hz("zt","18")  # 创建类的对象d.sy("yuyan")备注:(1)静态方法,实例方法(self),动态方法 (cls)===============================================
类的三大特性:封装、 继承、多态一、封装:
1、封装:封装就是隐藏对象一些不希望外部所访问到的属性和方法,保证安全
2、概念:指的是在设计时,不对外提供,隐藏起来,提供公共方法以外对其方法就是把属性和方法封装到一个抽象的类中,3、封装相当于一个黑盒子,我们将事务相关的属性和方法封装在一个类中,在调用类创建实例,不用关注内部代码的实现细节,我们只要调用结果就可以。4、封装的优点:
(1)封装数据可以很好的保护隐私、
(2)封装方法主要原因是隔离复杂度
(3)封装提高了代码的复用性
(4)隐藏对象的属性和实现细节,提供公共方法对其访问5、python中类的封装分为两种:
(1)公用(共用)
类中变量和方法公用,他们名称前没有下滑线,共有的变量和方法,在类的外部,内部以及子类都可以调用
(2)私用 
在类中变量和方法中,___下滑线开头命名,则改变变量或方法为私用,私有的变量和方法,只能在内部使用,类的尾部以及子类都无法使用。
私有属性:格式 ___属性名 =值    在类的外部不能使用(对象不能调用属性)
私有化封装后的限制:
a、类可以访问
b、类外,对象外  不可访问
c子类和子类的对象   不可访问案例1:数据封装:
class  sjfz():def  __init__(self,name,age):self .name=nameself.age=age
案例2:方法封装
class  sjfz(object):def  __init__(self,name,age):self .name=name #self.age=agedef  getname(self):#方法封装print(self.name)
案例3:私有方法
class  Sjfz(object):def  __init__(self,name,age):self .name=name #self.age=agedef  getname(self):#方法封装print(self.name)def  __sy(self):print(self.age)def  sydy(self):self.__sy()
if __name__ == '__main__':d=Sjfz("ZJ","18")d.getname()d.sydy()   #d只能调用sydy函数,无法直接调用__sy函数。案例4:
class  Sjfz(object):def  __init__(self,name,age):self .__name=name #私有变量self.__age=age   #私有变量def  setname(self,newname):#方法封装,改变私有变量的值self.__name=newnamedef  getname(self):  return  self.__name
if __name__ == '__main__':d=Sjfz("ZJ","18")d.setname("zt")print(d.getname())
=====================================
继承:

1、继承:类的继承是面向对象程序设计的一个重要思想,继承时子类可以继承父类的内容,包括成员变量和成员函数。

2、在继承中一个类被另外一个类继承这个类称之为父类也称之为基类,则另外一个类则为子类也称之为派生类

案例1:
class   F(object):def  fh(self):print("富豪")
class M():def  fp(self):print("富婆")
class S(F,M):def  qg(self):print("乞丐")if __name__ == '__main__':s=S()s.qg()s.fh()s.fp()
========================================
多态

1、多态是以继承和重写父类方法为前提,对所有子类实例化产生的对象调用相同的方法,执行产生不同的执行结果。

2、例如同样是人,但是当问起一个人的职业时会有不同的结果,可能是软件测试工程师,可能是HR

3、一个对象的属性和行为不是由他所继承的父类决定的,而是由其本身包含的属性和方法决定的

案例1:
class  A(object):def  talk(self):print("我是动物")
class  Cat(A):def  talk(self):print("喵喵")
class  Dog(A):def talk(self):print("汪汪")
if __name__ == '__main__':c=Cat()c.talk()  #喵喵d=Dog()d.talk()  #汪汪
====================
案例2:
class  Cc(object):def cs(self,x,y):print(x+y)
if __name__ == '__main__':c=Cc()c.cs(1,2) #数值c.cs("1","2") #字符c.cs(" 杭州","多测师") # 汉字
====================
案例3:
class F(object):#定义一个父类def  work(self):print("测试")
class   S1(F):#定一个类重写父类方法def work(self):print("开发")
class   S2(F):#定一个类重写父类方法def work(self):print("测试开发")
class  p(object):def  r_work(self,F):F.work()
if __name__ == '__main__':f=F()f.work()s1=S1()s1.work()s2 = S2()s2.work()r=p()r.r_work(f)r.r_work(s1)r.r_work(s2)
====================
拓展:
一、

 二、装饰器

(1)装饰器定义:
装饰器,本质是一个pyhton函数,他可以让其他函数在不需要做任何代码改动的前提下(增加额外功能),装饰器的返回值也是一个函数对象。
(2)应用场景:
插入日志,性能测试,事务处理,缓存,权限校验等场景
常见的装饰器:
内置装饰器,类装饰器,函数装饰器,带参数的函数装饰器

案例:
class A():
def init(self):
self.name =“wangwang”
self.__myname=“jingjing”
def a(self):
print(“001”)
def __b(self):
print(“002”)
def c(self):
print(“003”)
self.__b()
@property
def age(self):
return self.__myname
if name == ‘main’:
x=A()
print(x.name)
print(x.age)

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

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

相关文章

物联网实战--入门篇之(六)嵌入式-WIFI驱动(ESP8266)

目录 一、WIFI简介 二、基础网络知识 三、思路讲解 四、代码分析 4.1 状态机制 4.2 客户端连接 4.3 应用数据接收处理 4.4 数据发送 4.5 主函数调用 4.6 网络连接ID分配 五、总结 一、WIFI简介 WIFI在我们生活中太常见了,手机电脑都可以用WiFi连接路由器进行上…

2024品牌私域运营:「去中心化」正在成为企业决胜关键

越来越多的品牌选择以DTC模式与消费者互动和销售。通过与消费者建立紧密联系,不仅可提供更具成本效益的规模扩张方式,还能控制品牌体验、获取宝贵的第一方数据并提升盈利能力。许多企业采取的DTC私域策略以交易为中心的方法往往导致了成本上升和运营复杂…

【Blockchain】区块链浏览器 | 以太坊Etherscan比特币Blockchain门罗币Monero

区块链浏览器概述 区块链浏览器是一种软件,它使用API(应用程序编程接口)和区块链节点从区块链中提取各种数据,然后使用数据库来排列搜索到的数据,并以可搜索的格式将数据呈现给用户。 用户的输入是资源管理器上的可搜索项,然后通过数据库上…

市场复盘总结 20240329

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 一支股票 10%的时候可以操作, 90%的时间适合空仓等待 二进三: 进级率中 60% 最常用…

STM32系统结构及总线介绍

1、学习路径 STM32中文参考手册中的第二章存储器和总线构架 2、系统架构(中等容量芯片stm32f103c8) 在小容量、中容量和大容量产品中,主系统由以下部分构成: 四个驱动单元: CortexTM-M3内核DCode总线(D-bus)&#…

霍尼韦尔大路灯怎么样?书客、雷士、霍尼韦尔护眼落地灯实测PK!

生活在快节奏的时代中,当代青少年都顶着很大的压力,熬夜学习是家常便饭,有时还需要借助电子产品来辅助学习,再加上许多家长都不太注重孩子的视力健康问题,孩子长时间处于一个不良的环境光下学习,眼睛极易疲…

PyLMKit(9):ChatTable与你的表格聊天,表格问答

功能介绍 与你的结构化数据聊天:支持主流数据库、表格型excel等数据! ChatDB:支持数据库问答ChatTable:支持txt,excel,csv等pandas dataframe表格的问答 1.下载安装 pip install pylmkit -U pip install pandasql2.ChatTable实…

【AI+儿童绘本】从0到1制作儿童绘本故事操作思路

今天刷了会小H书,无意刷到一些 睡前儿童绘本故事, 下面一堆评论说 求软件什么的,博主只是引流没做任何回复。 这里写一篇文章科普下吧,免得有人被割韭菜。 制作儿童绘本, 大概这几个步骤。1、写生动有趣的故事&#x…

隐私计算实训营学习六:隐语PIR介绍及开发指南

文章目录 一、隐语实现的PIR总体介绍1.1 PIR的定义和种类1.2 隐语PIR功能分层 二、Index PIR-SealPIR介绍三、Keyword PIR- Labeled PSI介绍四、隐语PIR后续计划 一、隐语实现的PIR总体介绍 1.1 PIR的定义和种类 PIR(Private Information Retrieval PIR)隐匿查询:…

使用VNP时 本地服务/Dbeaver 无法连接数据库

在家使用VPN连接,启动本地Eclipse 的springboot 服务时,无法正常连接数据库。 解决方法: 在启动项配置中增加 -Djava.net.preferIPv4Stacktrue 之后,使用 Dbeaver时,也出现如下连接异常: 解决方法: 在dbe…

C语言:文件操作(2)

4.2 fputc的使用 这里写自定义目录标题 fputc的定义: 主要功能:一个字符一个字符的写进文件,将int类型的字符character写进文件流(FILE* stream)中,返回一个整形。如果成功fputc会返回写进文件的字符&…

城市雨量水位监测站

TH-SW2在繁华的现代都市中,有这样一个默默奉献的守护者,它时刻监测着城市的雨量和水位,为城市的安全提供着重要的保障。它就是我们今天要介绍的——城市雨量水位监测站。 一、雨量水位监测站的重要性 城市雨量水位监测站是城市防洪排涝体系的…

全局UI方法-弹窗三-文本滑动选择器弹窗(TextPickDialog)

1、描述 根据指定的选择范围创建文本选择器,展示在弹窗上。 2、接口 TextPickDialog(options?: TextPickDialogOptions) 3、TextPickDialogOptions 参数名称 参数类型 必填 参数描述 rang string[] | Resource 是 设置文本选择器的选择范围。 selected nu…

AI图像重绘解决方案

高质量的图像素材往往成本高昂且制作周期长,给企业带来了不小的困扰。美摄科技凭借其领先的AI图像重绘解决方案,为企业提供了一种高效、便捷且成本可控的图像优化途径,助力企业重塑视觉形象,引领市场新风尚。 美摄科技的AI图像重…

NASA数据集——2014 年、2015 年和 2017 年北美地区土壤地球物理属性值(源层厚度 (ALT)、介电常数、土壤水分剖面、表面粗糙度)

ABoVE: AirSWOT Color-Infrared Imagery Over Alaska and Canada, 2017 简介 文件修订日期:2019-04-25 数据集版本: 1 摘要 本数据集提供了根据 2014 年、2015 年和 2017 年 8 月和 10 月在阿拉斯加北部 12 个研究地点(除个别地点外)采集…

LLM大语言模型(八):ChatGLM3-6B使用的tokenizer模型BAAI/bge-large-zh-v1.5

背景 BGE embedding系列模型是由智源研究院研发的中文版文本表示模型。 可将任意文本映射为低维稠密向量,以用于检索、分类、聚类或语义匹配等任务,并可支持为大模型调用外部知识。 BAAI/BGE embedding系列模型 模型列表 ModelLanguageDescriptionq…

CCIE-11-IPSec-VPN

目录 实验条件网络拓朴实验目的 开始配置1. R2 Ping R3确定基础网络是通的2. 配置R23. 配置R34. 测试 实验条件 网络拓朴 实验目的 为PC1和PC2建立IPSec VPN PC1可以ping通PC2 开始配置 1. R2 Ping R3确定基础网络是通的 R2#show ip int br Interface IP…

UE5启用SteamOSS流程

一、安装OnlineSubsystemSteam插件 1、在UE里安装OnlineSubsystemSteam 2、设置默认开始地图 3、设置DefaultEngine.ini文件: 打开项目根目录/Config/DefaultEngine.ini文件 打开官网的配置说明 复制并粘贴到该文件中 4、设置运行模式 5、测试 确保Steam平台已…

【MATLAB源码-第24期】基于matlab的水声通信中海洋噪声的建模仿真,对比不同风速的影响。

操作环境: MATLAB 2022a 1、算法描述 水声通信: 水声通信是一种利用水中传播声波的方式进行信息传递的技术。它在水下环境中被广泛应用,特别是在海洋科学研究、海洋资源勘探、水下军事通信等领域。 1. **传输媒介**:水声通信利…

人工智能本地化的时代即将到来

2024 年 3 月 26 日,我有幸应邀参加了在北京凤凰中心举办的AI PC发布会。在这次活动中,英特尔展示了基于第一代酷睿 Ultra 高能效 X86 处理器的商用客户端,充分展现了 AI 加速下企业业务数字化的新趋势。英特尔成功地实现了对 AIGC 的最后一公…