python——封装、继承、多态

2023-10-30


在这里插入图片描述

继承

class Father:
    __secrect="xxx"
    story='从前有座山...'
    
    def tellAstory(self):
        print("我的故事:",self.story)
    
    def __tellAstory(self):
        #访问prvite属性的时候,需要使用类名进行访问
        print("我的密码:",Father.__secrect)
    
    
 #继承Father类
 class Son(Father):
        
        def tell(self):
            #继承父类 
            #强行调用父类的私有属性
            Father._Father__tellAstory()
            self.tellAstory()
        

# 3.覆盖/重写
#  子类和父类有相同名称和方法
#   可以理解为子类对于父类行为的扩展或者补充
class Pet:
    def __init__(self,name):
        self.name=name
        print(f"一个名叫{self.name}的宠物出生了")
       
    def  eat(self):
        print(f"{self.name}在吃东西....")
        
class Dog(Pet):
    
    def lookAfter(self):
        print(f"{self.name}在看门")
        
    def eat(self):
        print(f"{self.name}在啃骨头")

子类在定义的时候,可以使用supper()调用父类的方法

class Cat(Pet):
    #应用2:对象初始化时,简化重复属性的赋值
    def __init__(self,name,age,sex):
        #self.name=name
        #self.age=age
        #self.sex=sex
    	#print(f"一个名叫{self.name}的宠物出生了")
        #这种方式的代码重复度较大,采用supper()来调用父类
        #supper(Cat,self).__init__(name)
        super().__init__(name)
        self.gae=age
        self.sex=sex
    
    def eat(self):
        #self.cat()#不能这样去调用父类的eat()对象,默认是死循环
        super().eat()#调用父类的eat()对象
        print(f"{self.name}吃完东西后,用唾液洗洗脸")
多继承
#子类可以有多个父类
#例如:狗是脊椎动物,哺乳动物,宠物:

#访问子类的属性或方法时,解析的路径:


class Father:
    def getMoney(self):
        priint("父亲给了零花钱....")
        
  
class Mother:
    def getMoney(self):
        print("母亲给了零花钱....")
        
#继承Father和Mother
class Child(Father,Mother):
    def getMoney(self):
        super().getMoney()
        print("孩子有了零花钱...")
        
  
输出:父亲给了零花钱....
		孩子有了零花钱....
#假设Father类没有getMoney函数


class GrandFather:
    def getMoney(self):
        priint("爷爷给了零花钱....")
   

class Father(GrandFather)
	pass
        
  
class Mother:
    def getMoney(self):
        print("母亲给了零花钱....")
        
#继承Father和Mother
class Child(Father,Mother):
    def getMoney(self):
        super().getMoney()
        print("孩子有了零花钱.....")
       
   
#输出:
#爷爷给了零花钱....
#孩子有了零花钱.....

########################################
子类调用父类时,调用对象的顺序是深度优先
########################################

#打印子类查找顺序的方法
print(Child.mro())
#输出:
<class '__main__.Child'>,<class '__main__.Father'>,<class '__main__.GrandFather'>,<class '__main__.Mother'>,<class 'object'>,
#为什么结尾都是object?
#所有内置的对象的父类,万物皆对象,因为所有的类都是继承object类
#菱形继承
	Human
      |
  |---------|
Faher      Mother
  |---------|
       |
      Child
   
class Human:
    def __init__(self):
        print("人类.......")
        
class Father(Human):
    def __init__(self):
        print("父亲初始化....")
        super().__init__()
        print("父亲初始化结束....")
      
 class Mother(Human):
    def __init__(self):
        print("母亲初始化....")
        super().__init__()
        print("母亲初始化结束....")    
       
 class Child(Father,Mother):
    def __init__(self):
        print("孩子初始化....")
        super().__init__()
        print("孩子初始化结束....")
        
     
 c=Child()
     
 按照原来的理解方式:
 输出:
#孩子初始化....
#父亲初始化....
#人类.......
#父亲初始化结束....
#孩子初始化结束....


而实际的输出为:
#孩子初始化....
#父亲初始化....
#母亲初始化....
#人类.......
#母亲初始化结束....
#父亲初始化结束....
#孩子初始化结束....

查找基础顺序
print(child.mro())

########################################
初始化是广度优先遍历
########################################

多态

概念:一种类的多种形态

同一行为具有多个不同表现形态或形式的能力。是指一个类实例(对象)的相同方法在不同情形下有不同的表现形式

image-20220402225157321

通过继承的方式实现

1.让程序能够有更强的灵活性

2.让程序能够有更好从适应性

class Animal:
    def eating(self):
        print("动物下在吃东西.....")
        
   
class Pet(Animal):
    def eating(self):
        print("宠物在吃东西.....")
       
   
class Dog(Pet):
    def eating(self):
        print("狗在啃骨头.....")
       
   
class Cat(Pet):
    def eating(self):
        print("猫在吃鱼....")
        
       
class Zoo:
    def animallEating(self,animal):
        if isinstance(animal,Animal):
            print("这是展示动物吃东西的地方:")
        else:
            print("这是非动物吃饭的展示")
        animal.eating()

python特有的方式实现

没有继承关系,但是具备有相同的特征/方法,也可以直接使用.

继续在上面的代码后面追加定义:

class venusFlytrap:
    def eating(self):
        print("捕蝇草在吃小虫子.....")
   
v=venusFlytrap()
z=Zoo()
#z是Zoo类但是可以调用venusFlytrap类的对象
z.animallEating(v)
#这里传入的是v,在调用animallEating时需要调用eating对象
#而venusFlaytrap类也具有对象eating,在python中可以直接调用
#即便两个类之间没有继承关系,也可以调用
type和isinstance的区别
#判断类型时,只看直接类型
#type是严格满足类型
print(type(c) is Cat) #True
print(type(c) is Animal) #False
print(type(c) is Pet) #False


#isinstance 判断对象是否为一个类型的实例
# 判断实例类型时,涵盖父类的类型
print("*"*30)
print(isinstance(c,Cat)) #True
print(isinstance(c,Pet)) #True
print(isinstance(c,Animal)) #True
print(isinstance(v,Animal)) #False

类方法和静态方法

类方法
class Dog:
    
    legs=4
    teeth=42
    #类方法
    @classmethod
    def printInfo(cls):
        print(f"狗有{cls.legs}条腿,{cls.teeth}颗牙齿")
       
d=Dog()
d.printInfo()
Dog.printInfo()

静态方法

#静态方法:用@staticmethod装饰的不带self参数的方法叫做静态方法
#        类的静态方法可以没有参数,可以直接使用类调用

class dog:
    @staticmethod
    def bark(self):
        print("wangwang!")
       
  
d=Dog()
d.bark()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python——封装、继承、多态 的相关文章

  • 将字符串转换为带有毫秒和时区的日期时间 - Python

    我有以下 python 片段 from datetime import datetime timestamp 05 Jan 2015 17 47 59 000 0800 datetime object datetime strptime t
  • pandas 替换多个值

    以下是示例数据框 gt gt gt df pd DataFrame a 1 1 1 2 2 b 11 22 33 44 55 gt gt gt df a b 0 1 11 1 1 22 2 1 33 3 2 44 4 3 55 现在我想根据
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • 如何使用装饰器禁用某些功能的中间件?

    我想模仿的行为csrf exempt see here https docs djangoproject com en 1 11 ref csrf django views decorators csrf csrf exempt and h
  • 运行多个 scrapy 蜘蛛的正确方法

    我只是尝试使用在同一进程中运行多个蜘蛛新的 scrapy 文档 http doc scrapy org en 1 0 topics practices html但我得到 AttributeError CrawlerProcess objec
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • 在pyyaml中表示具有相同基类的不同类的实例

    我有一些单元测试集 希望将每个测试运行的结果存储为 YAML 文件以供进一步分析 YAML 格式的转储数据在几个方面满足我的需求 但测试属于不同的套装 结果有不同的父类 这是我所拥有的示例 gt gt gt rz shorthand for
  • Pandas Dataframe 中 bool 值的条件前向填充

    问题 如何转发 fill boolTruepandas 数据框中的值 如果是当天的第一个条目 True 到一天结束时 请参阅以下示例和所需的输出 Data import pandas as pd import numpy as np df
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • 如何在 Django 中使用并发进程记录到单个文件而不使用独占锁

    给定一个在多个服务器上同时执行的 Django 应用程序 该应用程序如何记录到单个共享日志文件 在网络共享中 而不保持该文件以独占模式永久打开 当您想要利用日志流时 这种情况适用于 Windows Azure 网站上托管的 Django 应
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4
  • 您可以在 Python 类型注释中指定方差吗?

    你能发现下面代码中的错误吗 米皮不能 from typing import Dict Any def add items d Dict str Any gt None d foo 5 d Dict str str add items d f
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数

随机推荐

  • DVWA靶场--文件上传/包含(low-high).

    文件上传 low 没有做任何过滤直接上传即可 medium 源码 uploaded type image jpeg uploaded type image png 这段源码可以看出来他对上传到content type值做了过滤 只允许上传这
  • 分享如何建立一个完美的 Python 项目

    当开始一个新的 Python 项目时 大家很容易一头扎进去就开始编码 其实花一点时间选择优秀的库 将为以后的开发节省大量时间 并带来更快乐的编码体验 在理想世界中 所有开发人员的关系是相互依赖和关联的 协作开发 代码要有完美的格式 没有低级
  • 小程序`canvasToTempFilePath:fail:cearte bitmap failed?`

    这个方法的思路来源链接 微信开放社区 主要是通过延迟 重试 以及画质来解决手机性能等问题导致的canvasToImageFile故障 代码仅供参考 欢迎大家提供更多方法或思路 或指出代码异常 谢谢 下面是我用到项目中的代码片段 海报信息 P
  • PID算法的理论分析

    PID算法的理论和应用 PID算法基本原理 PID算法的离散化 PID算法伪代码 PID算法C 实现 pid cpp pid h pid example cpp Python代码 仿真结果 PID算法基本原理 PID算法是控制行业最经典 最
  • webbench剖析

    webbench 其为linux上一款web性能压力测试工具 它最多可以模拟3万个并发连接数来测试服务器压力 其原理为fork多个子进程 每个子进程都循环做web访问测试 子进程将访问的结果通过管道告诉父进程 父进程做最终结果统计 其主要原
  • javaweb 之 JDBC 详解 数据库连接池

    JDBC简介 JDBC 就是使用Java语言操作关系型数据库的一套API 全称 Java DataBase Connectivity Java 数据库连接 JDBC 本质 官方 sun公司 定义的一套操作所有关系型数据库的规则 即接口 各个
  • 基于深度学习的花卉图像关键点检测

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 在本文中 我们描述了我们如何使用卷积神经网络 CNN 来估计花卉图像中关键点的位置 并且在 3D 模型上渲染这些图像上茎和花的位置等关键点 为了能够与真实花束的照片对比
  • C语言数码管全熄,各位大神,如何用C语言实现在数码管上实现1234同时亮

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 将移位寄存器内的数据锁存到输出寄存器并显示 void OUT 595 void RCK 595 0 nop nop
  • Linux下tar命令解压到指定的目录

    文章转自 http blog sina com cn s blog 62449fcf0100nfar html 版权归原作者 Linux下tar命令解压到指定的目录 tar zxvf bbs tar zip C zzz bbs 把根目录下的
  • POJ 2479 Dual Core CPU|网络流|dinic模版

    问题描述 总时间限制 15000ms 单个测试点时间限制 5000ms 内存限制 65536kB 描述 As more and more computers are equipped with dual core CPU SetagLilb
  • AI实战训练营&MMDetection安装配置指南

    AI实战训练营 MMDetection安装配置指南 一 MMDetection简介 版本迭代变化 2 0 3 0 二 环境检测和安装 三 准备数据集 四 自定义配置文件 一 MMDetection简介 MMDetection 是被广泛使用的
  • mq topic持久化订阅者(topic、queue的producer.setDeliveryMode(DeliveryMode. PERSISTENT)是指的mq服务),queue的消费者不在也会给

    mq topic持久化订阅者 topic queue的producer setDeliveryMode DeliveryMode PERSISTENT 是指的mq服务 queue的消费者不在也会给他保留 topic只有持久化订阅者会保留 1
  • 华为上机考试注意事项及编程技巧

    华为上机考试注意事项及编程技巧 这是一篇关于华为招聘软件类职位上机考试的博客 主要介绍一下华为机考的流程 注意事项以及一些机试题中常用的编程技巧 写得有点长 但都是尽心尽力敲的 如果真的要参加华为招聘 或者类似公司的招聘 建议稍微花点时间看
  • iOS navigationController中回到tabbarController根视图方法

    根据需求来改变跳转 self navigationController popToRootViewControllerAnimated NO self dismissViewControllerAnimated NO completion
  • Codeforces 1370 E

    题意 给定两个 01 01 01序列 S S S和 T T T 可以选择
  • 边缘提取之sobel、scharr、laplacian、canny算子

    转载自 https blog csdn net m0 37704205 article details 88699636
  • Python 生成、识别社会统一信用代码

    三证合一之后 社会统一信用代码就是企业的身份证 也就是说只要你的程序涉及企业信息的录入 那就少不了社会统一信用代码的录入 这里分享一个工具 可以用 Python 来识别社会统一信用代码 也可以随机生成社会统一信用代码 社会统一信用代码 共
  • android开发中遇到的一些问题及解决方案

    相信大家在打包也遇到过这样的问题把 打包失败 以下是昨天我昨天开发时遇到的一些问题 经过查找资料 顺利解决 不过多赘述 问题如下 问题一 Messages报错如下 Errors while building APK You can find
  • 剑指Offer62—圆圈中最后剩下的数字

    剑指Offer62 题意 0 1 n 1这n个数字排成一个圆圈 从数字0开始 每次从这个圆圈里删除第m个数字 删除后从下一个数字开始计数 求出这个圆圈里剩下的最后一个数字 例如 0 1 2 3 4这5个数字组成一个圆圈 从数字0开始每次删除
  • python——封装、继承、多态

    文章目录 继承 多继承 多态 type和isinstance的区别 类方法和静态方法 类方法 继承 class Father secrect xxx story 从前有座山 def tellAstory self print 我的故事 se