百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

[2]Python面向对象-【5】继承

off999 2024-12-07 15:57 21 浏览 0 评论

在Python中,继承是一种对象编程的重要概念。继承允许您定义一个类,该类从现有类中继承属性和方法,以便您可以更轻松地编写新的类。本教程将为您介绍Python中的继承概念和如何使用它来创建和扩展类。

什么是继承

继承是一种面向对象编程中的重要概念。它允许您定义一个类,该类从另一个类中继承属性和方法。继承允许您重用现有代码,并使代码更易于管理。

Python中的继承是基于类的。当您定义一个类时,可以指定该类从另一个类继承。子类(也称为派生类)将继承父类(也称为基类)的所有属性和方法,并可以添加自己的属性和方法。子类可以覆盖继承的方法,并添加新方法。

创建一个子类

在Python中,创建子类很简单。只需定义一个新的类,并将其放在父类的括号中。例如,假设您有一个名为Person的父类,您可以使用以下代码创建一个名为Student的子类:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

class Student(Person):
    def __init__(self, name, age, grade):
        super().__init__(name, age)
        self.grade = grade

在上面的代码中,Student类继承了Person类。因此,Student类将自动继承Person类的所有属性和方法。然后,Student类定义了自己的构造函数,该函数使用super()函数调用其父类的构造函数来设置name和age属性,并将grade属性设置为子类特有的属性。

访问继承的属性和方法

一旦您创建了一个子类,您就可以使用它继承的属性和方法。例如,使用上面的代码,您可以创建一个Student对象并访问其name和age属性:

student = Student('Alice', 18, 'A')
print(student.name)
print(student.age)

输出:

Alice
18

在上面的代码中,student对象继承了Person类的name和age属性,并可以像访问普通属性一样访问它们。

覆盖继承的方法

子类可以覆盖继承的方法。这是通过在子类中重新定义方法来实现的。例如,假设您有一个Person类,其中包含一个greet()方法,您可以使用以下代码在Student类中覆盖该方法:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def greet(self):
        print(f"Hi, my name is {self.name}.")

class Student(Person):
    def __init__(self, name, age, grade):
        super().__init__(name, age)
        self.grade = grade
    
    def greet(self):
        print(f"Hi, my name is {self.name} and I'm a student in grade {self.grade}.")

在上面的代码中,Student类覆盖了Person类的greet()方法。当您调用greet()方法时,将调用Student类的版本而不是Person类的版本:

student = Student('Alice', 18, 'A')
student.greet()

输出:

Hi, my name is Alice and I'm a student in grade A.

super()函数

当您在子类中定义一个新的构造函数或方法时,您通常需要调用父类的构造函数或方法。为此,您可以使用super()函数。super()函数返回一个临时对象,该对象允许您调用父类的方法。在上面的示例中,我们使用super().__init__(name, age)调用了Person类的构造函数。

多重继承

Python还支持多重继承,这意味着一个类可以从多个类继承。要指定多个父类,请将它们包含在一个元组中。例如,假设您有两个父类,一个是Person类,另一个是Teacher类,您可以使用以下代码创建一个名为TeachingAssistant的子类:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def greet(self):
        print(f"Hi, my name is {self.name}.")

class Teacher:
    def __init__(self, subject):
        self.subject = subject
    
    def teach(self):
        print(f"I'm teaching {self.subject}.")

class TeachingAssistant(Person, Teacher):
    def __init__(self, name, age, subject):
        Person.__init__(self, name, age)
        Teacher.__init__(self, subject)

在上面的代码中,TeachingAssistant类继承了Person类和Teacher类。因此,它将自动继承这两个类的属性和方法。TeachingAssistant类还定义了自己的构造函数,该函数分别调用父类的构造函数以设置属性。

另外,除了上面提到的继承的基础知识外,还有一些其他关于继承方面需要掌握的知识,让我们继续。

父类的属性和方法的访问权限

在子类中,您可以通过使用self关键字来访问父类的属性和方法。但是,父类的私有属性和方法(即以两个下划线开头的属性和方法)是不能被子类访问的。这种限制是出于安全和封装的目的。

如果您需要在子类中访问父类的私有属性或方法,您可以使用名称重整(name mangling)来间接地访问它们。在Python中,名称重整是通过在属性或方法名称前面添加两个下划线和一个类名来实现的。例如,假设您有一个Person类,它有一个私有属性__age,您可以使用以下代码在子类中访问它:

class Student(Person):
    def get_age(self):
        return self._Person__age

在上面的代码中,Student类重命名了__age属性,并在方法get_age()中使用它。

抽象类和接口

在Python中,您可以使用抽象类和接口来定义一个类的行为。抽象类是一个不能被实例化的类,它定义了一组方法,这些方法必须在子类中实现。接口是一组方法的规范,这些方法必须在实现接口的类中实现。

在Python中,抽象类和接口是通过在类定义中使用abc模块来实现的。以下是一个使用抽象类的示例:

import abc

class Shape(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def area(self):
        pass

class Square(Shape):
    def __init__(self, side):
        self.side = side
    
    def area(self):
        return self.side ** 2

在上面的代码中,Shape类是一个抽象类,它定义了一个抽象方法area(),这个方法必须在子类中实现。Square类是Shape类的子类,并实现了area()方法。

Mixin

Mixin是一种特殊的类,它被设计为在多个类之间共享一些相同的方法和属性。Mixin类通常不是作为独立的类来使用的,而是作为其他类的一部分。以下是一个使用Mixin的示例:

class PrintableMixin:
    def __repr__(self):
        return f"{type(self).__name__}({self.__dict__!r})"

class Person(PrintableMixin):
    def __init__(self, name, age):
        self.name = name
        self.age = age

class Student(Person):
    def __init__(self, name, age, grade):
        super().__init__(name, age)
        self.grade = grade

在上面的代码中,PrintableMixin类是一个Mixin类,它定义了一些通用的方法,例如__repr__()方法,可以将一个对象转换为字符串。Person类继承了PrintableMixin类,并继承了__repr__()方法。Student类也继承了Person类和PrintableMixin类,并从Person类中继承了__repr__()方法。

使用Mixin类的好处是可以在多个类之间共享一些相同的代码,从而减少了代码重复。

多重继承

多重继承是指一个类可以同时从多个父类中继承属性和方法。在Python中,您可以通过在类定义中使用多个父类来实现多重继承。以下是一个使用多重继承的示例:

class Person:
    def __init__(self, name):
        self.name = name
    
    def greet(self):
        print(f"Hello, my name is {self.name}.")

class Student:
    def __init__(self, name, grade):
        self.name = name
        self.grade = grade
    
    def study(self):
        print(f"{self.name} is studying.")

class CollegeStudent(Person, Student):
    def __init__(self, name, grade, major):
        Person.__init__(self, name)
        Student.__init__(self, name, grade)
        self.major = major
    
    def study(self):
        print(f"{self.name} is studying {self.major}.")

在上面的代码中,Person和Student类是两个父类,CollegeStudent类从这两个父类中继承了属性和方法。在CollegeStudent类中,__init__()方法分别调用了Person类和Student类的__init__()方法来初始化父类的属性。CollegeStudent类还覆盖了Student类的study()方法来实现自己的功能。

需要注意的是,多重继承可能会导致代码变得复杂和难以维护。在使用多重继承时,需要小心设计类之间的关系,以避免出现冲突和歧义。

方法重写(Overriding)

方法重写是指在子类中重新定义父类的方法,以实现不同的功能。子类可以覆盖父类的方法,也可以在父类的基础上添加新的方法。

以下是一个使用方法重写的示例:

class Person:
    def __init__(self, name):
        self.name = name
    
    def greet(self):
        print(f"Hello, my name is {self.name}.")

class Student(Person):
    def __init__(self, name, grade):
        super().__init__(name)
        self.grade = grade
    
    def greet(self):
        print(f"Hello, my name is {self.name} and I am in grade {self.grade}.")
    
    def study(self):
        print(f"{self.name} is studying.")

在上面的代码中,Student类继承了Person类,并重写了greet()方法。Student类的greet()方法覆盖了Person类的greet()方法,并添加了一个额外的信息(学年级)。这意味着当您调用greet()方法时,Student类的方法将覆盖Person类的方法。

需要注意的是,子类的方法重写可能会影响父类的行为。如果您在子类中重写父类的方法,请确保您理解重写的影响,并在必要时调用父类的方法。您可以使用super()函数来调用父类的方法,如上面的示例中所示。

总结

继承是面向对象编程中的一个重要概念,它允许子类从父类中继承属性和方法,并在此基础上添加新的功能。Python中的继承使用类的定义来实现,并可以使用单继承或多重继承。

当使用继承时,您需要考虑类之间的关系和继承的影响。您可以使用super()函数来调用父类的方法,并使用Mixin类来共享通用的代码。此外,方法重写可以在子类中重新定义父类的方法,以实现不同的功能。

希望这篇文章可以帮助到您,也欢迎关注、评论、转发~~

相关推荐

tplogin管理员登录入口(tplogin重新设置密码)

tplogin.cn是新版tplink路由器的登录地址(管理页面地址),在浏览器中输入tplogin.cn,就可以打开tplink路由器的管理页面(登录页面)。具体的登录方法如下:1、打开电脑上的浏...

psp模拟器怎么导入游戏(psp模拟器怎么导入游戏 Vivo手机)

方法如下:1、打开能操作文件的助手软件,用pp链接后点击左下文件,然后点常用目录下的程序用户,会出现ppsspp的文件夹。2、打开ppsspp文件夹,会出来四个选项文件夹,第一个进去后是psp文件夹,...

电脑系统怎样升级(电脑系统怎么升级)

电脑系统升级方法步骤,1、打开电脑,点击电脑左下角的开始菜单,在弹出的菜单选项中选择“控制面板”。2、点击“开始”,点击“控制面板”3、在控制面板中,点击“系统和安全”。4、点击启用或禁用自动更新。5...

win10正版系统下载网站(win10官方下载网站)
  • win10正版系统下载网站(win10官方下载网站)
  • win10正版系统下载网站(win10官方下载网站)
  • win10正版系统下载网站(win10官方下载网站)
  • win10正版系统下载网站(win10官方下载网站)
windows无法激活(windows无法激活有什么影响)

1.如果修复或重新组装了电脑,则可能是安装了不同版本的Windows。或者,如果在修复过程中为电脑使用了其他产品密钥,当使用该密钥的电脑数大于Microsoft软件许可条款允许的电脑数时,该密钥...

新机怎么激活windows10(新机怎么激活电池)
  • 新机怎么激活windows10(新机怎么激活电池)
  • 新机怎么激活windows10(新机怎么激活电池)
  • 新机怎么激活windows10(新机怎么激活电池)
  • 新机怎么激活windows10(新机怎么激活电池)
u盘文件恢复软件免费(恢复u盘数据免费的软件)
u盘文件恢复软件免费(恢复u盘数据免费的软件)

u盘损坏文件恢复方法:1、打开电脑桌面的“计算机”或“我的电脑”。2、然后再找到需要修复的u盘。3、打开“运行”窗口(可以直接按“Windows+R”快捷打开),输入“CMD”并点击“确定”按钮以进入命令提符界面。4、从打开的“命令提示符”...

2025-12-28 22:03 off999

win10蓝屏代码大全以及解决方法
  • win10蓝屏代码大全以及解决方法
  • win10蓝屏代码大全以及解决方法
  • win10蓝屏代码大全以及解决方法
  • win10蓝屏代码大全以及解决方法
电脑uac是什么意思

UAC就是用户帐户控制,在对计算机进行更改之前,用户帐户控制(UAC)会通知您。比如安装软件驱动什么的,默认UAC设置会在程序尝试对计算机进行更改时通知您,但您可以通过调整设置来控制UAC...

笔记本找不到自己家的wifi怎么办

1.笔记本电脑缺少无线网卡驱动,需要下载驱动如果笔记本电脑开机之后,无法显示WiFi网络的图标,这个时候多半是因为电脑缺少无线网卡驱动造成的,有时候自己在清理电脑的时候,不小心清理了驱动程序,便会...

电信宽带办理电话是多少(电信宽带办理联系电话)

电信宽带不一定需要电信手机号码,可以根据自身需要选择,有单独的宽带业务,一般要求预存一定时间的使用费。不过一般包含了宽带、手机号码的融合套餐总体上更优惠,对客户来说更划算。如果有相应需求的话,建议同时...

开机进入ghost启动项(电脑启动进入ghost)

电脑启动的时候进入GHOST界面方法:  1、首先确认电脑装了GHOST软件。  2、重启电脑,注意仔细观察电脑屏幕,会有一个3s或者10s的选择界面。让选择是进入GHOST界面,或者正常启动进入系...

华硕bios修复蓝屏图解(华硕bios修复蓝屏视频教程)

先看下BIOS是否可以识别到硬盘设备,若看不到,硬盘故障的可能性很大。若可以看到硬盘,建议先尝试进行BIOS兼容性设置:1,在BIOS界面,通过方向键进【Secure】菜单,通过方向键选择【Sec...

老电脑怎么装win7系统(老电脑装win7系统可以吗)

6年前的电脑,如果是用的当时最新的CPU的话,应该是第7代或者第6代酷睿等级的。运行windows7和windows10都应该没有压力。从软件的兼容性来说,还是建议安装windows10,因为现在有好...

电脑怎么设置到点自动关机(电脑怎样设置到点关机)

1、首先我们点击电脑屏幕左下角的开始按钮,在所有程序里依次选择附件---系统工具,接着打开任务计划程序。2、我们打开任务计划程序后,在最右边的操作框里选择创建基本任务,然后在创建基本任务对话框的名称一...

取消回复欢迎 发表评论: