python学习笔记:继承与超类

这篇具有很好参考价值的文章主要介绍了python学习笔记:继承与超类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

与java类似,继承的出现是为了提高代码的重复利用率,避免多次输入同样的代码。而超类就是java中的父类。

1.继承

要指定超类,可在定义类时,在class语句中的类名后加上超类名

  • 基类就是超类,派生类就是子类

格式文章来源地址https://www.toymoban.com/news/detail-549380.html

class Dog:   # 
	pass

class Bobo(Dog):  # Dog类的子类
	pass

子类会

  • 重新定义重写超类方法init
  • 继承超类的方法,无需再次编写
class Dog:
    def __init__(self):
        print('wang!!!')
    
    def eat(self):
        print('Dog is eating.')
    
class Bobo(Dog):  # 继承Dog
    pass

tom = Bobo()
tom.eat()
> 
wang!!!
Dog is eating.

在子类中进行重写

class Dog:
    def __init__(self):
        print('wang!!!')
    
    def eat(self):
        print('Dog is eating.')
    
class Bobo(Dog):
    def __init__(self):
        print('Bobo is wang!')

    def eat(self):
        print('Bobo is eating.')

tom = Bobo()
tom.eat()
>
Bobo is wang!
Bobo is eating.

1.1查找一个类的子类和基类

  • issubclass 确定一个类是否是另一个类的子类
issubclass(Bobo, Dog)  # 子类 超类
> True
issubclass(Dog, Bobo)
> False
  • 已知一个类,想知道它的基类,访问特殊属性 __bases__
print(Bobo.__bases__)
> (<class '__main__.Dog'>,)
  • isinstance 确定创建的对象是否是特定类的实例

    创建子类的实例,这个对象同时也是其基类的实例

class Dog:
    pass
    
class Bobo(Dog):
    pass

tom = Bobo()

print(isinstance(tom, Bobo))
print(isinstance(tom, Dog))
>
True
True
  • 使用属性__class__ 可以知道该实例属于哪个类
print(tom.__class__)
> <class '__main__.Bobo'>

1.2 多个超类

尽量避免使用

格式

class A:
	pass
class B:
	pass

class C(A, B):  # 同时继承A和B
	pass 

1.3接口

接口这一概念与多态相关。实际上,python中没有与java相对应的接口。需要特定的模块来实现

1.4 抽象基类

抽象类不能(不应该)被实例化,用于定义子类应该实现的一些抽象方法。

格式

from abc import ABC, abstractmethod
class 类名(ABC):  # 继承ABC类
	@abstractmethod   # 标记为抽象方法,在子类中必须实现
	def 方法名(self):
		pass
from abc import ABC, abstractmethod

class Dog(ABC):
    @abstractmethod
    def eat(self):
        pass
    
class Bobo(Dog):
    def eat(self):
        print('eating.')

tom = Bobo()
tom.eat()
> eating.

到了这里,关于python学习笔记:继承与超类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习笔记 - 基于PyTorch + 类似ResNet的单目标检测

            我们将处理年龄相关性黄斑变性 (AMD) 患者的眼部图像。          数据集下载地址,从下面的地址中,找到iChallenge-AMD,然后下载。 Baidu Research Open-Access Dataset - Download Download Baidu Research Open-Access Dataset https://ai.baidu.com/broad/download         这里也提供了百度网盘下

    2024年02月12日
    浏览(27)
  • 继承(个人学习笔记黑马学习)

    继承方式一共有三种: 公共继承 保护继承 私有继承 菱形继承概念 : 两个派生类继承同一个基类 又有某个类同时继承者两个派生类 这种继承被称为菱形继承,或者钻石继承

    2024年02月09日
    浏览(30)
  • 【04-提升模型性能:集成学习与超参数优化】

      在前几篇博文中,我们已经介绍了一些机器学习的基础知识、Scikit-learn的核心工具与技巧,以及如何评估模型性能。本篇博文将重点讲解两个可以显著提升机器学习模型性能的高级策略:集成学习和超参数优化。   集成学习是一种策略,通过组合多个学习算法来获得比

    2024年04月29日
    浏览(32)
  • C# 学习笔记-001-继承

             实现继承:                        表示一个类型派生于一个基类型,拥有改类型的所有成员字段和函数。          接口继承:                         表示一个类型只继承了函数函数签名,没有继承任何实现代码。         虚方法:                

    2024年01月20日
    浏览(31)
  • [CUDA 学习笔记] 如何优化 CUDA 矩阵乘内核以获得类似 cuBLAS 的性能: 工作日志

    注: 本文主要是对博文 “How to Optimize a CUDA Matmul Kernel for cuBLAS-like Performance: a Worklog - SIBOEHM” 的翻译, 并进行了一定的备注和补充 在这篇文章中, 我将迭代优化用 CUDA 编写的矩阵乘法的实现. 我的目标不是构建一个 cuBLAS 替代品, 而是深入了解用于现代深度学习的 GPU 的最重要的

    2024年04月28日
    浏览(24)
  • 【Lua学习笔记】Lua进阶——Table(4)继承,封装,多态

    现在我们可以像面向对象一样,new一个对应基类的对象了。但是这里的new也不完全相似与面向对象的new,例如我们可以这样做: 我们在封装Object类的时候可完全没有name这个索引,而在Lua中我们new了一个新对象,还能新加入一些变量和方法,这些特性明显是继承了父类的子类才

    2024年02月15日
    浏览(36)
  • 【从零学习python 】48.Python中的继承与多继承详解

    单继承 子类只继承一个父类,继承概念表示子类获得了父类的所有方法和属性。 子类继承自父类,可以享受父类中已经封装好的方法,不需要再次定义。子类中应该根据职责封装子类特有的属性和方法。 继承具有传递性,例如 Dog 类继承自 Animal , XiaoTianQuan 又继承自 Dog 类

    2024年02月12日
    浏览(23)
  • 深度学习技巧应用37-模型训练过程中训练曲线的观察方法与超参数随机搜索方法

    大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用37-模型训练过程中训练曲线的观察方法与超参数随机搜索方法。观察训练曲线可以帮助了解模型性能和诊断问题,如过拟合或欠拟合。超参数随机搜索是一种自动选择最优超参数组合的方法,通过在给定空间内随机

    2024年02月20日
    浏览(28)
  • 设计模式学习笔记 - 面向对象 - 2.封装、抽象、继承、多态分别用来解决哪些问题?

    封装 也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方法(或者叫作函数)来访问内部信息或数据。 下面这段代码是一个简化版的虚拟钱包的代码实现。在金融系统中,我们会给每个用户创建一个虚拟钱包,用来记录用户在我们

    2024年02月21日
    浏览(39)
  • c++出现 [Error] ** was not declared in this scope类似的问题怎么办?

    如果出现这个错误,有2种可能。 1.定义**数据类型语句的前一行没有写分号,而且你在程序中调用了他。 例如以下这个语句就会报错: 因为第4行后面没有写分号,而且后面用了d++。所以会报错。 2.在程序里调用的c++函数没有引进数据流。 就拿memset函数举例吧:memset需导入

    2024年02月07日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包