Python学习笔记--5.(封装、继承、多态)Python面向对象编程介绍及其三大特性_python封装性,继承性和多态性,这些特性使程序-程序员宅基地

技术标签: python  python学习  继承  面向对象编程  多态  封装  


前言

本章我们将学习全新的python进阶学习,面向对象编程。在对前面基础知识的简单回顾后、将通过类(class)、对象(object)学习python面向对象编程的三大特性——封装、继承、多态。


一、python基础知识回顾

1.开发工具:python解释器、pycharm

2.数据类型:

​ 数值类型: int ,float, bool, complex(复数)

​ 字符串str:‘hello’
​ 元组tuple和列表list:
​ 元组不可增删改查
​ 集合set和字典dict
​ 集合:无序不重复,可用于去重

3.输入与输出
​ 输入:input() , 读入文件内容
​ 输出:print(),导出为文件

4.函数
def 函数名(参数):
​ 函数体
​ return 返回值
result = 函数名(参数)

面试常见问题 *args:可变参数(元组) **kwargs :关键字参数(字典)是什么?

二、面向对象编程介绍(了解)

面向过程编程:以过程为中心的编程思想,eg:C C++
特点:
按照需求,一步一步完成
模块化(一步一步完成)、流程化(一步一步执行)
优点:性能高 ,因为调用类开销非常大,
缺点:可维护性差。不易复用,不易扩展

在这里插入图片描述

函数式编程:
把运算过程尽量写成一系列嵌套的函数调用,把函数作为输入输出
eg:装饰器

面向对象编程:
特性:抽象 封装 继承 多态
优点:可复用、可扩展、可维护性高、系统更灵活
缺点:性能比面向对象低

三、面向对象编程三大特性(重点)

为什么好维护好拓展?

类(Class) 是现实或思维中的实体在计算机中的反映,是个模板
对象(Object)是具体类型。
类和对象是面向对象编程技术的最基本概念。
eg、鱼和三文鱼、猫和蓝猫

属性: 通常是个名词

python开发规范PEP8
首字母大写,驼峰式命名法: StudentCount
所以:
类是创建实例的模板
对象是面向类的一个个实例

class People:
    country = 'china'
    city = "xi'an"

    def __init__(self, name, age):
        print('正在执行构造方法.....')
        print('self:', self)
        self.name = name  # self.name就是将对象和属性绑定在一起的过程
        self.age = age

    def coding(self):
        print('%s正在编程中......' % (self.name))
# 封装
# 对象object(实例化对象)
p1 = People(name='张三', age=18)
print('p1:', p1)
print(p1.name, p1.age)
p1.coding()

在这里插入图片描述

三大特性:封装、继承和多态

封装

封装
1)将内容封装到某处
2)从某处调用封装内的内容

__ init__:构造方法,与普通的方法不同,会自动执行(在实例化对象的时候

   def __init__(self, name, age):
        print('正在执行构造方法.....')
        print('self:', self)
        self.name = name  # self.name就是将对象和属性绑定在一起的过程
        self.age = age

self是什么?
实例化的对象 ,(self)中的self是形参

封装: 将对象和属性绑在一起
self.attribute = ‘xxxx’

使用封装的内容:
self.attribute
obj.name.attribute

debug代码即可查看特性

总结:
面向对象的封装,其实就是使用构造方法将内容封装到对象中,然后通过对象直接或self间接获取被封装的内容。

继承

继承
多继承
私有属性与私有方法

继承

继承描述的是事物之间的所属关系,当我们定义一个class的时候,可以从某个现有的class 继承。

子类、扩展类

# 子类ComputerStudent继承Student父类
class ComputerStudent(Student):
    def get_grade(self):
        if 70 <= self.score <= 100:
            return 'A'
        else:
            return 'B'

父类、基类

# 父类(基类)
class Student:
    def __init__(self, name, score):
        self.name = name
        self.score = score

函数中,pass 用于占位

如何实现继承:()中写上父类
怎么继承:自己有方法执行自己的,自己没有方法执行父类的

调用父类的方法:

super(ComputerStudent, self).learning() ##找到ComputerStudent的父类,执行父类的learning方法

父类:

# 父类(基类)
class Student:
    def __init__(self, name, score):
        self.name = name
        self.score = score

    def get_grade(self):
        if 90 <= self.score <= 100:
            return 'A'
        else:
            return 'B'

    def learning(self):
        print('每天早上8:00-18:00开始学习')

子类:

def learning(self):
    # 3). 调用父类的方法:找到ComputerStudent的父类,执行父类的learning方法
    super(ComputerStudent, self).learning()
    print('   - 操作系统')
    print('   - 计算机网络')
    print('   - 计算机组成')
    print('   - 数据结构与算法')

# 子类MathStudent继承Student父类
class MathStudent(Student):
    def learning(self):
        # 3).调用父类的方法:找到MathStudent的父类,执行父类的learning方法
        super(MathStudent, self).learning()
        print('   - 高等数学')
        print('   - 线性代数')

调用:

# 1). 继承规则: 自己有get_grade方法执行自己的get_grade方法
s1 = ComputerStudent('李四', 80)
print(s1.get_grade())  # A
s1.learning()
# print(s1.aa())   # 不会执行

# 2). 继承规则: 自己没有get_grade方法执行父类的get_grade方法
s1 = MathStudent('张三', 80)
print(s1.get_grade())  # B
# print(s1.aa())   # 不会执行
s1.learning()

执行结果:
在这里插入图片描述

私有属性、私有方法

私有属性:
只有类的内部可以访问、子类也不可以、只能通过函数简介调用

self.__score = score  # 1). 私有属性

私有方法:

def __play_game(self):  # 3). 私有方法
    print('正在玩游戏')

私有方法也只能内部调用,外部统统不可以调用

s = Student(name='张三', score=100)
print(s.get_grade())
# print(s.__score)     # 1). 类的外部不可以访问私有属性
s.set_score(80)
print(s.get_grade())  # 2). 如果想要修改私有属性,可以提供方法set_score在类的内部修改

在这里插入图片描述

多继承:子类有多个父类

python2:新式类和经典类(现已停用)
经典类:深度优先算法 不指定就是经典类
新式类:广度优先算法 指定类名就是新式类

python3:都是新式类、继承时遵循广度优先算法

多态

多态特性:“多种状态”,不同对象执行同一方法 执行结果是完全不同的
上个例子中、计算机学生和数学学生执行learning结果不同。

四、项目案例:栈和队列的封装

队列封装
需求:
队列是限制在一端进行插入操作和另一端删除操作的线性表,允许进行插入操作的一端称为“队尾”, 允许进行删除操作的一端称为“队头”,,当队列中没有元素时称为“空队”。特点 :先进先出(FIFO)。
在这里插入图片描述

class Queue(object):
    """以list为基础封装队列数据结构"""

    def __init__(self):
        # []左侧队头只能弹出,右侧队尾只能添加
        self.queue = []

    def enqueue(self, val):
        """入队"""
        self.queue.append(val)

    def dequene(self):
        """出队"""
        if self.is_empty():
            return 'error'
        item = self.queue.pop(0) # pop是内置函数 即弹出第一个队头元素
        return item

    def is_empty(self):
        """判断栈是否为空"""
        return len(self.queue) == 0

    def top(self):
        """获取队头元素"""
        if self.is_empty():
            return 'error'
        return self.queue[0]

    def __len__(self):
        """获取队内元素"""
        # 魔术方法,当执行len(obj)自动执行的方法
        # 拓展(魔术方法):http://c.biancheng.net/view/7817.html
        return len(self.queue)

    # def __str__(self):
    #     return ",".join([str(i) for i in self.queue])
# print(str(s))

Q = Queue()
Q.enqueue(7)
Q.enqueue(6)
print(len(Q))
print(Q.is_empty())
# Q.dequene()
print(Q.top())

部分执行结果:
在这里插入图片描述

笔记补充

pycharm中批量替换
ctrl+r ----> 输入替换前和替换后的词,点击replace

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45233090/article/details/118059733

智能推荐

Linux学习之网络相关命令_nc -u 172.0.0.1 12345-程序员宅基地

文章浏览阅读965次。strace、traceroute、tracert、sar、ifconfig、ip、nc、lsof、stat、netstat、ps、pstree、ss、telnet、top、Htop、iotop、powertop、iftop、dstat、nethogs、Nmon、vnstat、host、dig、route、tcpdump_nc -u 172.0.0.1 12345

/etc/hosts.conf_/etc/host.conf-程序员宅基地

文章浏览阅读2.6k次。作用指定如何解析主机域名,可设置网络安全。默认文件内容默认情况,/etc/hosts.conf 文件有如下内容 order hosts,bind multi on12参数说明order是解析顺序的参数,order hosts,bind,nis ,说明先查询解析/etc/hosts文件,然后DNS,再是NIS。multi表示是否运行/etc/hosts文件允许主机指定多个多个地址 ,multi on表示运行。nospoof是否允许服务器对ip地址进行其欺骗,nospoof on表_/etc/host.conf

工业机器人四大家族(ABB、库卡、安川)全套资料,欢迎下载!_abb机器人 panbaidu com-程序员宅基地

文章浏览阅读7.1k次,点赞7次,收藏10次。自1954年世界上第一台机器人诞生以来,世界工业发达国家已经建立起完善的工业机器人产业体系。日本、德国的工业机器人水平全球领先,“四大家族”(ABB、库卡、发那科、安川)为全球主要的工业机器人供应商,占据全球约50%的市场份额,这主要因为他们具备先发优势和技术沉淀。 图表1:全球工业机器人“四大家族”介绍随着我国工业自动化、智能化的发展加速,工业机器人的应用普及也带来了市场的急剧增长。既然在中国机..._abb机器人 panbaidu com

Linux基础命令(常用基本操作命令 管道 重定向 grep)_输入重定向命令,首先输入grep ipv6 /etc/*,观察结果,然后将此命令的输出信息-程序员宅基地

文章浏览阅读410次。终端命令格式command [-option] [parameter]command :命令option : 选项parameter:参数查阅命令帮助信息command –help : 帮助信息man command: Linux手册中函数的具体使用通配符* :任意个数字符? :至少一个字符[] :字符组 [abc][a-f]自动补全..._输入重定向命令,首先输入grep ipv6 /etc/*,观察结果,然后将此命令的输出信息

ultraedit高亮显示verilog文件_verilog.uew-程序员宅基地

文章浏览阅读9.5k次,点赞4次,收藏14次。1、下载文件到官网下载Verilog的语法高亮文件,链接如下:http://www.ultraedit.com/index.php?name=Content&pa=showpageπd=40#wordfiles2、文件配置将下载到的“verilog.uew”放到ulteaedit安装路径下的wordfiles文件夹内,以及C:\Documents and Setti_verilog.uew

黑马程序员---IO流二_记录一个程序运行的次数,当满足指定次数,改程序就不可以再继续运行了-程序员宅基地

文章浏览阅读941次。1. 字符流----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------3.1 概念:计算机不区分二进制文件与文本文件。所有的文件都是以二进制形式存储的,因此,从本质上说,所以的文件都是二进制文件。所以字符流是建立在字节流之上,它能够提供字符层次的编码和解码。在写入一个字符时,Java虚拟机会将字符_记录一个程序运行的次数,当满足指定次数,改程序就不可以再继续运行了

随便推点

什么是低音炮,低音炮的原理与音效-程序员宅基地

文章浏览阅读1.2k次。什么是低音炮,低音炮的原理与音效2011-06-15 15:16 低音炮是大家的一个俗称或者简称,严格讲应该是:同轴喇叭,高音仔,超高音,超重低音。就人耳可闻的音频分析而言,由超重低音、低音、低中音、中音、中高音、高音、超高音等组成。 ..._音效是控制低音炮的原理

TypeSDK总体设计思路和架构-程序员宅基地

文章浏览阅读2.1k次。引言:本文旨在提供读者制作一个自己的聚合SDK的思路,抛砖引玉,让更多的读者对聚合SDK有好的理解。 这是最好的时代,这是最坏的时代,这是智慧的时代,这是愚蠢的时代;这是信仰的时期,这是怀疑的时期;这是光明的季节,这是黑暗的季节;这是希望之春,这是失望之冬;人们面前有着各样事物,人们面前一无所有;人们正在直登天堂;人们正在直下地狱。——《双城记》 双城记的开头,正是_typesdk

keras第一个例程mnist_mlp.py解读-程序员宅基地

文章浏览阅读6.4k次。装好keras后,马上运行了例程minst_mlp.py,哇好牛逼,准确率98.4%,但是并不知道自己干了啥。好吧,啃代码。 1. 开头就懵了,数据集在哪呐。 好,从这句入手,找到mnist.py, 从网上下载了minst.pkl.gz,自己顺手下了下来,解压,打开,,,然而并看不懂。肿么办? 不怕,看这里:机器学习–读取mnist数据集 对于这个数据集的详情也可以参考这里:THE_mnist_mlp.py

Solidity 从入门到实战(三)_remix 转账-程序员宅基地

文章浏览阅读1.7k次,点赞3次,收藏8次。Solidity 从入门到实战(三)注意:本专栏主要来自于https://www.bilibili.com/video/BV1St411a7Pk?p=11&spm_id_from=pageDriver的学习笔记以及https://blog.csdn.net/weixin_45067603/article/details/105751748以太坊中的地址1.以太坊中的地址以40位的16进制表示,储存以uint160进行存储2.地址之间支持大小比较、3.可以分为外部账户地址和合约地址_remix 转账

工具:VMware虚拟机各种后缀文件总结_.vmem-程序员宅基地

文章浏览阅读5.6k次,点赞7次,收藏20次。一、文件介绍.log日志文件。这个文件记录了VMwareWorkstation对虚拟机调节运行的情况,记录虚拟机操作,可用了故障诊断。.vmdk这是一个虚拟磁盘文件,它储存了虚拟机硬盘驱动器里的内容。一台虚拟机可以由一个或几个虚拟磁盘文件组成。如果你已经特别指定了虚拟磁盘每2GB为一单独文件的话,虚拟磁盘的大小就决定了虚拟磁盘文件的数量。随着数据写入虚拟磁盘,虚拟磁盘文件将变大,直到这些文件为2GB。(如果你在创建虚拟磁盘时已经把所有的空间都分配了,那么这些文件将在初始时就具..._.vmem

C语言——死亡游戏_今天她玩了一个新游戏,发现每次死亡后角色的金币都会掉落,假设角色开局有g个金币,-程序员宅基地

文章浏览阅读1.3k次,点赞5次,收藏18次。问题描述:据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus和他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。请你编写一个函数,计算一下Josephus 和他的朋友应该安排在什么位置,才能免于一死(最后剩下他们两人)。【要求人的总数与报数均由键_今天她玩了一个新游戏,发现每次死亡后角色的金币都会掉落,假设角色开局有g个金币,

推荐文章

热门文章

相关标签