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)
    @classmethod
    def 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)
    @classmethod
    def d(cls):
        print(cls.name)
    @staticmethod
    def 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=name
        self.age=age
案例2:方法封装
class  sjfz(object):
    def  __init__(self,name,age):
        self .name=name #
        self.age=age
    def  getname(self):#方法封装
        print(self.name)
案例3:私有方法
class  Sjfz(object):
    def  __init__(self,name,age):
        self .name=name #
        self.age=age
    def  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=newname
    def  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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql 本地电脑服务部署

前提: 下载mysql 新建配置文档 在安装mysql目录新建 my.ini [mysqld] # 设置3306端口 port3306#设置mysql的安装目录 basedirC:\Program Files\MySQL\MySQL Server 8.3 #切记此处一定要用双斜杠\\,单斜杠我这里会出错,不过看别人的教程,有…

使用Pilotfish扩展Sui执行能力

Pilotfish第一个多机智能合约执行引擎,使Sui网络的验证节点可以利用多台机器,并在负载增加时自动扩展以执行更多的交易。这一目标实现不会影响可靠性或功能完整性。 Pilotfish可以从内部执行机器的故障中恢复,并支持Sui的全面动态操作。其流…

openstack云计算(一)————openstack安装教程,创建空白虚拟机,虚拟机的环境准备

1、创建空白虚拟机 需要注意的步骤会截图一下,其它的基本都是下一步,默认的即可 ----------------------------------------------------------- 2、在所建的空白虚拟机上安装CentOS 7操作系统 (1)、在安装CentOS 7的启动界面中…

杨元庆:AI是创新者的赛跑,必须打造自研自创产品

在2024/25财年誓师大会上,联想集团董事长兼CEO杨元庆宣布公司未来十年的新使命——引领人工智能变革。在杨元庆看来,这次誓师大会吹响了联想第五个十年征程集结号:在联想稳健穿越周期、恢复增长,迎来成立40周年的里程碑时刻&#…

【嵌入式智能产品开发实战】(十二)—— 政安晨:通过ARM-Linux掌握基本技能【C语言程序的安装运行】

目录 程序的安装 程序安装的本质 在Linux下制作软件安装包 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 嵌入式智能产品开发实战 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正&#xf…

机器学习 -- 随机森林DEMO

场景 之前看一些歌手或者演员选取节目的时候,上面不是一个评委,少则三五个,多则几十个,当做重要决定时,大家可能都会考虑吸取多个专家而不只是一个人的意见。机器学习也是一样的,机器学习中分为两种&#…

开源AI引擎:自然语言处理技术在人岗匹配中的应用

一、应用场景介绍 如何从海量的求职者中精准地匹配到合适的候选人,是每个人力资源部门都需要解决的问题。自然语言处理(NLP)技术的发展为人岗匹配提供了新的解决方案。通过信息抽取和文本分类技术,企业可以更高效地分析职位描述和…

数据结构堆

前言: 在前面我们已经学习了数据结构的基础操作:顺序表和链表及其相关内容,今天我们来学一点有些难度的知识——数据结构中的二叉树,今天我们先来学习二叉树中堆的知识,这部分内容还是非常有意思的,下面我们…

苹果App上架指南

苹果上架要求是苹果公司对于提交应用程序到苹果商店上架的要求和规定。这些要求主要是为了保证用户体验、应用程序的质量和安全性。以下是苹果上架要求的详细介绍:1. 应用程序的内容和功能必须符合苹果公司的规 苹果上架要求是苹果公司对于提交应用程序到苹果商店上…

APS54083 大功率深度调光降压恒流驱动IC PWM 线性调光 车灯IC

特点 ◆ 宽输入电压范围:5V~100V ◆ 可设定电流范围:10mA~2000mA ◆ 固定关断时间控制 ◆ 内置抖频电路,降低对其他设备的 EMI 干扰 ◆ 过温保护 ◆ 调光功能:线性调光/PWM 调光 ◆ PWM 调光深度小于…

机器学习——卷积的变种

机器学习——卷积的变种 卷积神经网络(Convolutional Neural Networks, CNNs)是深度学习领域中最重要的技术之一,它在图像处理、语音识别、自然语言处理等领域取得了巨大成功。在CNN中,卷积层是最核心的组成部分之一,…

【解决方案】荣耀系统Android8.0 system目录Read-only file system

本来以为直接把Charles证书改成系统证书格式,然后通过mt管理器root之后移动到系统证书目录就行了,结果访问baidu仍然显示网络错误,折腾一晚上。安装为用户证书,又与系统证书冲突。 手机型号:荣耀v10 EMUI&#xff1a…

ALPHA开发板上的PHY芯片驱动:LAN8720驱动

一. 简介 前面文章了解到,Linux内核是有提供 PHY通用驱动的。 本文来简单了解一下ALPHA开发板上的 PHY网络芯片LAN8720的驱动。是 LAN8720芯片的公司提供的 PHY驱动。 二. ALPHA开发板上的PHY芯片驱动:LAN8720驱动 我 们 来 看 一 下 LAN8720A 的 …

Linux系统下安装ElasticSearch

一、228环境ES使用安装 1、检验ES服务是否安装成功的方法 (1)查看Elasticsearch进程是否成功 ps -ef|grep elasticsearch (2)linux elasticsearch下访问(curl带认证访问) curl --user elastic:Zhes.13…

基于ssm的企业台账管理平台(java项目+文档+源码)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的企业台账管理平台。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 管理员:首页、个人…

使用argocd作为cd流程

一、前言 讲述关于argocd在cicd流程中的使用,ci这里使用gitlabjenkins流水线的方式,jenkins用于拉代码打包、构建镜像、变更yaml文件的镜像、推送变更的yaml文件到gitlab的gitops仓库中,最后再有argocd实现cd流程, 二、使用 关于…

抢占AI算力头筹,宁畅发布全局智算新战略AI算力栈

1、在以大模型为焦点的新一轮AI竞赛中,智能计算作为推动产业发展的关键引擎,已经不再局限于算力性能这一单一竞争要素。 2、算法协同优化、数据处理能力、模型可解释性以及与特定行业应用的融合度,都成为了智能计算能否成功推动技术创新和实际…

用可视化案例讲Rust编程5.用泛型和特性实现自适配绘制和颜色设置

上一节我们讲了用泛型实现返回结果,这一节我们来讲讲在函数签名里面使用泛型来对输入参数进行自适配。 先看UML设计图: 好吧,看起来有点复杂,我们一个个来解释。 首先定义的是一个生成绘图元素需要的参数结构,并且定义个特性&am…

紫外线吸收剂为光稳定剂代表产品 塑料及化妆品领域为其主要需求端

紫外线吸收剂为光稳定剂代表产品 塑料及化妆品领域为其主要需求端 紫外线吸收剂指能吸收阳光及荧光光源中的紫外线部分的一种光稳定剂。紫外线吸收剂具有热稳定性好、可吸收紫外线、化学稳定性好、能增强目标物色泽稳定性、毒性低等优势,在塑料、化妆品、纺织品、涂…

大厂级别交互设计秘籍:一篇读懂

交互式设计属于UI设计之一,也是当今流行的设计之一。许多大型工厂非常需要交互式设计人才,这一趋势也引起了许多毕业生和UI设计爱好者的广泛关注,那么你知道大型工厂设计师必要的交互式设计是什么吗?这篇文章将带你了解。 什么是…