首页 > 编程语言 >python——面向对象(2)继承与多态

python——面向对象(2)继承与多态

时间:2024-07-20 18:27:37浏览次数:18  
标签:__ run python 子类 self 多态 面向对象 继承 def

文章目录


在Python中,继承是一种基于已存在的类来创建新类的方式。这种机制允许我们定义一个通用的类,然后基于这个类来定义一些特定的类,这些特定的类将继承通用类的属性和方法,同时也可以添加或覆盖一些新的属性和方法。这种方式极大地提高了代码的重用性和可扩展性。

继承的基本语法

在Python中,使用冒号(:)来表示类之间的继承关系。子类(或派生类)在定义时,将其父类(或基类)的名字放在括号中。
实例

class Parent:
    def __init__(self, name):
        self.name = name
    def greet(self):
        print(f"Hello,{self.name}!")

class Child(Parent):
    def __init__(self,name,age):
        super().__init__(name)
        self.age =age

    def greet(self):
        super().greet()
        print(f"I'm {self.age} years old.")

if __name__ == '__main__':
    child_instance = Child("john",10)
    child_instance.greet()
#输出结果:
#Hello,john!
#I'm 10 years old.

继承的特点

  • 代码重用:继承允许子类直接使用父类中的属性和方法,无需重新编写相同的代码。
  • 扩展性:子类可以在继承父类的基础上添加新的属性和方法,或者覆盖(重写)父类中的方法以提供特定的实现。
  • 多态性:继承是实现多态性的基础。多态性允许我们将子类的对象当作父类的对象来使用,同时保持子类的特定行为。

继承的类型

  • 单继承:子类只继承一个父类。上面的例子就是单继承的示例。
  • 多继承:子类继承多个父类。在Python中,可以使用逗号分隔多个父类来实现多继承。
    实例
class A:
    def method_a(self):
        print("Method A")

class B:
    def method_b(self):
        print("Method B")

class C(A, B):
    pass

c_instance = C()
c_instance.method_a() # 调用A类方法
c_instance.method_b() # 调用B类方法
# 输出结果:
#Method A
#Method B

多态

多态的本质在于同一函数接口(即方法)在接受不同的类型参量时表现出不同的行为。这得益于面向对象编程中的继承机制,子类可以继承父类的方法,并根据需要重写这些方法,从而在调用时展现出不同的行为。
实例:

class Animal(object):
    def __init__(self, leg, height):
        self.leg = leg
        self.height = height
    def run(self):
        print("Animal is run")
class Dog(Animal):
    def __init__(self, leg, height, bark):
        super().__init__(leg, height)
        self.bark = bark
    def run(self):
        print("dog is running")
class Cat(Animal):
    def __init__(self, leg, height, jump):
        super().__init__(leg, height)
        self.jump = jump
    def run(self):
        super().run()
        print("cat is running")
def run_twice(animal:Animal):
    animal.run()
    animal.run()
if __name__ == '__main__':
    animal = Animal(4,1)
    snoopy = Dog(3,1.2,"wnagwang")
    tom = Cat(2,1.1,1.8)
    run_twice(animal)
    run_twice(snoopy)
    run_twice(tom)
#输出结果:
#dog is running
#dog is running
#Animal is run
#cat is running
#Animal is run
#cat is running

多态是编程中一种强大的特性,它允许程序员编写出更加灵活、可重用和可扩展的代码。通过多态,可以实现不同对象对同一消息的不同响应,从而满足复杂的编程需求。

标签:__,run,python,子类,self,多态,面向对象,继承,def
From: https://blog.csdn.net/2301_77698138/article/details/140475565

相关文章

  • Python 更换 pip 源详细指南
    目录前言pip国内源临时换源方法一:添加参数方法二:设置环境变量永久换源方法三:修改配置方法四:pip命令修改总结前言在我们使用Python3时,pip是一个不可或缺的工具,它用于安装和管理第三方库。然而,有时我们可能会遇到Python库下载速度慢的问题,这是因为默认的pi......
  • 使用Python的Turtle库绘制中国火箭模型,点燃航天梦!
    引言在编程教育中,turtle模块是一个非常受欢迎的图形化编程工具,尤其适合初学者学习和实践。它允许我们通过控制一个可以在屏幕上移动的“小乌龟”来绘制各种形状和图案,从而让编程变得直观且有趣。Turtle库简介turtle是Python标准库的一部分,它提供了一个简单而强大的绘图环......
  • 用Python调整图片尺寸教程【附源码】
    就像我们学习数学一样,多做题多练习,才会熟能生巧。更多项目源码,实战案例,文件夹领取方式在文末学习Python也是一样,练习才是学好Python的最优解。只有不停的敲代码,不断练习,才能不断进步。实操练习你是否遇到过上传照片有大小要求?不管是上传证件照报名参赛,总会有一个不要......
  • 干货 |Python中的循环结构
    应用场景我们在写程序的时候,一定会遇到需要重复执行某条或某些指令的场景。例如用程序控制机器人踢足球,如果机器人持球而且还没有进入射门范围,那么我们就要一直发出让机器人向球门方向移动的指令。在这个场景中,让机器人向球门方向移动就是一个需要重复的动作,当然这里还会......
  • 干货| Python代码性能优化总结
    本文会介绍不少的Python代码加速运行的技巧。在深入代码优化细节之前,需要了解一些代码优化基本原则。第一个基本原则:不要过早优化很多人一开始写代码就奔着性能优化的目标,“让正确的程序更快要比让快速的程序正确容易得多”。因此,优化的前提是代码能正常工作。过早地进......
  • 在pyspark(python)中将json字符串扩展到多列
    我需要将Json对象(b列)扩展到多列。从此表中,A列B列id1[{a:1,b:'letter1'}]id2[{a:1,b:'letter2',c:3,d:4}]对......
  • 面向对象的一些知识
    文章目录类与对象类里有什么内容?类和对象的关系对象和引用的关系对象在哪里开辟空间private修饰符-私有化this关键字-本对象封装构造方法static修饰符-静态的继承优缺点子类能否继承父类所有属性和方法super关键字重写/复写访问修饰符Objectfinal抽象类抽象方法......
  • python实现文件的读写
    python实现文件的读写路径的书写:open("E:\\ai_03\\code\\ai_03_python\\day07\\data.txt")#两个斜杠open(r"E:\ai_03\code\ai_03_python\day07\data.txt","w",encoding="utf8")#建议使用读文件读文件的格式要以读文件的模式打开一个文件对象,使用Python......
  • python模块化设计
    在Python中,模块化是将代码分解为独立的功能块,并通过导入和使用这些功能块来实现代码复用和组织的一种方式。模块化的编程风格使得代码更易于维护、扩展和测试。以下是Python实现模块化的一些常用方法:使用import语句导入模块:可以使用import语句导入其他Python文件(.py文件)作为......
  • 5分钟解锁python多线程
    以下是一个使用Python多线程的简单示例代码:importthreadingdefprint_numbers():foriinrange(1,6):print(i)defprint_letters():forletterin['A','B','C','D','E']:print(letter)if__nam......