python面向对象(下)

news2025/8/9 5:36:23

python面向对象下

  • 封装
    • 封装的方法
    • 获取私有属性
  • 继承
    • 单一继承
      • 语法格式
      • 同名的情况
      • 私有属性的调用方法
    • 多重继承
      • 语法格式
      • 小例子
      • 同名的情况
  • 多态
  • 持续更新中~~~~~~~~~

封装

封装是面向对象的核心思想。它是指将对象的属性和行为封装起来,其载体就是类,类通常对客户隐藏细节,这就是封装的思想。

私有属性:我们在属性前加两个下划线表示的是私有属性

封装的方法

我们写如下的代码:

class Student():
    def __init__(self,myName,myScore):
        self.name,self.score=myName,myScore
    def __str__(self):
        return '姓名:'+str(self.name)+'\t成绩:'+str(self.score)
s1=Student('ohhh',100)
print(s1)
s1.score=-18
print(s1)

以上的结果如下:
在这里插入图片描述
我们在实际情况中,通常是不能将成绩改成负数的,所以这里为了防止用户的自我修改,就用到了封装
下面是封装后的代码:

class Student():
    def __init__(self,myName,myScore):
        self.name,self.__score=myName,myScore
    def __str__(self):
        return '姓名:'+str(self.name)+'\t成绩:'+str(self.__score)
s1=Student('ohhh',100)
print(s1)
s1.__score=-18
print(s1)

下面是程序的执行图:
在这里插入图片描述
我们发现将__score这个变量不能够被函数外面的引用修改我们可以想一下在游戏中,我们可以自己修改自己的用户名,但是自己不能修改自己的等级,和这个封装很类似

获取私有属性

我们通常应该提供设置或获取属性值的两个方法供外界使用,如下面的代码:

class Student():
    def __init__(self,myName,myScore):
        self.name=myName
        self.setScore(myScore)
    def setScore(self,myScore):
        if(myScore>=0 and myScore<=100):
            self.__score=myScore
        else:
            self.__score=0
            print("输入的成绩有误!")
    def getScore(self):
        return self.__score
    def __str__(self):
        return '姓名:'+str(self.name)+'\t成绩:'+str(self.__score)
s1=Student('ohhh',-100)
print(s1)
s2=Student('ojjj',89)
print(s2)

下面是代码结果:
在这里插入图片描述

继承

用于描述类的所属关系,多个类通过继承形成一个关系体系

单一继承

语法格式

单一继承只有一个基类,继承关系比较简单,操作比较容易,因此使用相对较多
语法格式如下代码:

class People(object): #object通常省略
    print('人们有不同的职业')
class Student(People):
    print('我们都一样')

派生类继承于基类,派生类可以使用基类的所有公有成员,也可以定义新的属性和方法,从而完成对基类的扩展,python中所有的类继承于object,但是其通常省略

同名的情况

如果派生类中的属性和方法同名,那么派生类实例对象调用派生类中的定义的属性和方法,如下例所示:

class Person(object):
    def __init__(self,name):
        self.name='wan' #实例对象
    def show(self):
        print("姓名",self.name)
class Student(Person):
    def __init__(self,name,score):
        self.name,self.__score=name,score
    def __str__(self):
        return "姓名:"+self.name+' '+'分数:'+str(self.__score)
s1=Student('qian',100)
print(s1)

下面是代码运行结果:
在这里插入图片描述
如果派生类的构造函数中需要添加参数,则可以再派生类中调用基类,如下例所示:(也有很多其他的方法,如直接给继承的变量赋新值就可以)

class Person(object):
    name='ccc'
    def __init__(self,name):
        self.name='wan'
    def show(self):
        print("姓名",self.name)
class Student(Person):
    def __init__(self,name,score):
        super(Student,self).__init__(name)
        # Person.__init__(self,name) # 这两种形式都可以
        self.__score=100
    def __str__(self):
        return "姓名:"+self.name+' '+'分数:'+str(self.__score)
s1=Student('qian',100)
print(s1)

下面是运行结果:
在这里插入图片描述
我们发现,这个虽然传入了自己的参数,但是输出的name是基类中的名字

私有属性的调用方法

这里要注意的是基类的私有属性和方法是不会被派生类继承的,因此,派生类不能反问基类的私有成员,但是可以通过相应的方法间接调用,如下例所示:

class Person(object):
    def __init__(self,name):
        self.__name=name
    def __show(self):
        print("姓名:",self.__name)
    def get_name(self):
        print(self.__name)
    def get_method(self):
        self.__show()
class Student(Person):
    def test(self):
        print(self.__name)
    def test1(self):
        self.get_name()
        self.get_method()
s1=Student('1111')
# s1.test()# 我们会发现调用这个的话会报错
s1.test1()

下面是输出结果:
在这里插入图片描述
我们发现对于基类中的私有变量,我们只能通过一定的方法去访问,不能直接访问

多重继承

语法格式

多重继承就是指派生类同时继承多个基类,其语法格式如下:

class 基类1(object):
    类体
class 基类2(object):
    类体
class 派生类(基类1,基类2):
    类体

格式很简单,就是再派生类里面依次写上要继承的类名即可。

小例子

下面是一个样例代码:

class Student(object):
    def __init__(self,name,score):
        self.name,self.score=name,score
    def showStd(self):
        print('姓名:',self.name,'分数:',self.score)
class Staff(object):
    def __init__(self,id,salary):
        self.id,self.salary=id,salary
    def showStf(self):
        print('ID:',self.id,'薪资:',self.salary)
class jobGraduate(Student,Staff):
    def __init__(self,name,score,id,salary):
        Student.__init__(self,name,score)
        Staff.__init__(self,id,salary)
g1=jobGraduate('qian',100,'001',1000000)
g1.showStd()
g1.showStf()

下面是输出结果:
在这里插入图片描述

同名的情况

在多重继承中,如果基类存在同名的方法,python按照继承顺序从左到右在基类中搜索方法
如下例:

class Student(object):
    def __init__(self,name,score):
        self.name,self.score=name,score
    def showStf(self):
        print('姓名:',self.name,'分数:',self.score)
class Staff(object):
    def __init__(self,id,salary):
        self.id,self.salary=id,salary
    def showStf(self):
        print('ID:',self.id,'薪资:',self.salary)
class jobGraduate(Student,Staff):
    def __init__(self,name,score,id,salary):
        Student.__init__(self,name,score)
        Staff.__init__(self,id,salary)
g1=jobGraduate('qian',100,'001',1000000)
g1.showStf()

我们将两个方法改成同名,发现是执行的继承的第一个对象:
在这里插入图片描述
总的来说,多重继承和单一继承是一样的,只是有一个在继承的类中依次查询变量的过程

多态

多态是指基类的同一个方法在不同的派生类对象中具有不同的表现和行为,当调用该方法时,程序会根据对象选择合适的方法
下面是一个例子:

class animal(object):
    def __init__(self,name,call):
        self.name=name
        self.call=call
    def say(self):
        print(self.call)
    def get(self):
        print(self.name)
class dog(animal):
    def __init__(self):
        self.name='dog'
        self.call='汪汪'
class cat(animal):
    def __init__(self):
        self.name='cat'
        self.call='喵喵'
an1=dog()
an1.say()
an1.get()
an2=cat()
an2.say()
an2.get()

持续更新中~~~~~~~~~

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

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

相关文章

linux搭建git服务器,windows客户端配置git

Linux服务器配置之Git服务器搭建步骤&#xff1a; 一、配置环境 1、服务器&#xff1a;CentOS 8.2&#xff08;64位&#xff09; Git &#xff08;version 2.27.0&#xff09; 2、客户端&#xff1a;Windows 10 &#xff08;64位&#xff09; Git&#xff08;version 2.38.…

基于深度学习的AI绘画为何突然一下子火了?

CLIP &#xff5c;Midjourney | dreamstudio AIGC | Stable Diffusion | Imagen 随着Disco、Midjourney、dreamstudio 、AIGC、Stable Diffusion、Imagen、深度学习、高性能计算、数据分析、数据挖掘等技术的快速发展&#xff0c;AI绘画技术得到迅速发展。 即使今年年初的AI绘…

Redis String类型使用方法

String 类型 String 类型&#xff0c;也就是字符串类型&#xff0c;是Redis中最简单的存储类型。 其value是字符串&#xff0c;不过根据字符串的格式不同&#xff0c;又可以分为3类&#xff1a; string&#xff1a;普通字符串int&#xff1a;整数类型&#xff0c;可以做自增、…

国际站、速卖通、Lazada店铺运营技巧?如何提升销量?

现在国际站、速卖通、Lazada平台开店的卖家越来越多&#xff0c;如何让店铺稳定的使用下去&#xff0c;是每一个卖家都需要思考的问题。现在我们一起来看一看&#xff0c;有哪些运营上需要注意的事项。 1选择产品 不管什么平台都是一样&#xff0c;产品是根本&#xff0c;只有…

Handler 原理

线程的应用场景 Android是单线程模型&#xff0c;Activity、Service、Broadcast等组件的创建&#xff0c;都是在主线程完成的&#xff0c;即UI线程。但如果需要执行一些耗时的操作时&#xff0c;比如&#xff1a;I/O的读写、大文件的读写、数据库操作以及网络上传和下载等操作都…

Linux登陆配置虚拟机

启用虚拟机一、启动虚拟机1、登录虚拟机2、查看IP地址3、能否PING通外网二、配置静态IP地址1、修改网卡配置文件2、重启网络服务3、重启虚拟机4、查看修改后的IP地址5、测试虚拟机能否Ping通外网三、测试宿主机与虚拟机能否相互Ping通1、测试宿主机能否Ping通虚拟机2、测试虚拟…

信创产业多点开花,AntDB数据库积极参与行业标准研制,协同价值链伙伴共促新发展

11月&#xff0c;AntDB数据库积极参与多项数据库行业标准研讨会&#xff0c;助推行业规范建立&#xff1b;凭借领先的技术研发能力与企业创新能力&#xff0c;在今年9月入选了《2022爱分析数据智能厂商全景报告》&#xff0c;此次又凭借在信创市场的深入推广&#xff0c;入选《…

反转链表问题的递归解法

目录 一、反转整个链表 二、反转部分链表 一、反转整个链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 首先在方法中我们需要判断递归终止的情况&#xff0c;如果headnull或者head.nextnull&#xff0c;那么我们就可以直接返回hea…

【快速上手系列】保姆级Layuimini与SSM的联合使用教程(数据表格操作)

【快速上手系列】保姆级Layuimini与SSM的联合使用教程&#xff08;数据表格操作&#xff09; 使用步骤 导入layuimini 下载layuimini文件 这个并不是直接运行的&#xff0c;需要用HBuilder导入 layuimini的项目路径 我用的是iframe版&#xff0c;个人更喜欢这种的&#x1…

Git -- submoudule子模块使用

文章目录子模块的作用添加子模块拉取带子模块的项目修改子模块代码子模块的作用 通常情况下&#xff0c;我们做项目时会有几个业务功能区分比较明确的模块&#xff0c;比如简单来说&#xff0c;一个项目我们可以分为认证授权模块、工具类模块、常规业务模块。 而像认证…

【外卖项目实战开发一】

文章目录1、软件开发整体介绍2、外卖项目介绍3、环境搭建数据库环境搭建创建数据库执行SQL脚本数据表maven项目搭建添加依赖:application.yml配置application启动类4、后台登录功能开发需求分析代码开发5、后台退出功能开发1、软件开发整体介绍 软件开发流程 角色分工 软件…

基于JAVA的企业人力人事资源管理系统OA,部门、人员、薪资、招聘功能齐全的项目【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86427647 摘要 随着知识经济的崛起&#xff0c;掌握了高新技术和具有现代管理理念的人已成为经济发展的原动力。一个企业要在市场竞争中取得优势地位&#xff0c;依靠的主要不是物质资源&…

FCPX插件:Stupid Raisins Title Pop (78个动画标题+2个额外背景)

fcpx插件&#xff1a;Stupid RAIsins Title Pop for Mac激活版是兼容Final Cut Pro x的一款动画标题字幕插件。Stupid RAIsins Title Pop mac版包含78个fcpx动画标题2个额外背景&#xff0c;可以快速拖放编辑&#xff0c;使用基本&#xff0c;连续&#xff0c;充满活力&#xf…

电容笔做的比较好的品牌有哪些?高性价比电容笔测评

现在&#xff0c;高技术在推动数字产品的发展&#xff0c;同时也在增加。不管是工作还是学习&#xff0c;大屏幕可以使图像更加清晰。无论现在或将来&#xff0c;平板电脑都将成为我们日常生活中不可或缺的一部分。一款简单易用的电容笔&#xff0c;能够极大地提高我们的工作效…

7.9 用户接口

目录 一 序言 二 应用层实现 三 内核层实现 一 序言 这一部分&#xff0c;我们简单介绍一下用户接口。从本质上讲&#xff0c;操作系统就是对计算机硬件资源进行一个封装&#xff0c;从而方便用户来使用。前面几部分&#xff0c;我们重点介绍了操作系统自身的一些功能&#…

SpringBoot SpringBoot 原理篇 1 自动配置 1.5 proxyBeanMethod

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇1 自动配置1.5 proxyBeanMethod1.5.1 ImportResource1.5.2 proxyBeanMethod1 …

Qt使用QAudioInput、QAudioOutput实现局域网的音频通话

本文旨在介绍一下用Qt来实现局域网音频通话功能 技术实现 QAudioInput、QAudioOutput&#xff08;Qt采集和播放音频类&#xff09; QUdpSocket&#xff08;Qt的UDP通信类&#xff09; 话不多说&#xff0c;直接上代码链接&#xff0c;想下载的朋友可以直接去gitee下载。 整体…

项目管理范围(上)

范围管理概述 产品范围与项目范围的区别&#xff1a; 产品范围是指产品或者服务所应该包含的功能&#xff0c;项目范围是指为了能够交付产品&#xff0c;项目所必须做的工作。 什么是WBS&#xff1f; 工作分解结构&#xff08;简称WBS&#xff0c; Work Breakdown Structure…

科学孕育:婴幼儿食物过敏怎么办?

近年来&#xff0c;食物过敏的发病率呈明显上升趋势&#xff0c;已成为危害儿童健康的全球性问题。据统计&#xff0c;我国儿童食物过敏的发病率为3%~10%[1]。其中&#xff0c;0~4岁婴幼儿和学龄前儿童食物过敏的发病率最高。婴儿过敏反复发生.具有湿疹和食物过敏史的婴儿易患哮…

热门Java IDE——MyEclipse的数据库和持久化支持

MyEclipse支持开发者使用Java EE、Spring、JPA、Hibernate和POJOs快速开发以数据库为中心的应用程序&#xff0c;通过使用JDBC标准和嵌入式Derby数据库的数十个数据库的连接器&#xff0c;开发人员可以快速启动并运行。从持久性到逆向工程&#xff0c;再到可视化ER模型&#xf…