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

python类的继承和多态的应用举例(python继承和多态的区别)

off999 2024-10-25 13:44 14 浏览 0 评论

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

    def show_info(self):
        print(f"I am {self._name}, {self._age} years old.")

class Teacher(Person):
    def __init__(self, name, age, salary):
        super().__init__(name, age)
        self._salary = salary

    def show_info(self):
        print(f"I am {self._name}, a teacher, {self._age} years old. My salary is {self._salary}.")

    def teach(self):
        print("I am teaching.")

class Professor(Person):
    def __init__(self, name, age, research_field):
        super().__init__(name, age)
        self._research_field = research_field

    def show_info(self):
        print(f"I am {self._name}, a professor, {self._age} years old. My research field is {self._research_field}.")

    def research(self):
        print("I am doing research.")

类的继承和多态是面向对象编程中的重要概念,可以提高代码的重用性和可维护性。在本例中,我们创建了一个Person类作为基类,然后创建了Teacher类和Professor类作为子类,并在此基础上添加了新的属性和方法。Teacher类和Professor类都重写了Person类的show_info()方法,表现出不同的行为。通过继承和多态,我们可以使代码更加灵活和可扩展。

属性的类型

Python中的属性可以分为四种类型:类属性、实例属性(共有属性)、私有属性和保护属性。

  1. 类属性:定义在类中,而不是在类的某个实例中。类属性在所有实例中共享,并且可以通过类名或实例名进行访问。在上述例子中,Person类中的_count就是一个类属性。
  2. 实例属性(共有属性):定义在类的实例中,可以通过实例名进行访问。在上述例子中,Teacher类和Professor类中的_name、_age等都是实例属性。
  3. 私有属性:以两个下划线开头的属性是私有属性,只能在类内部访问。在上述例子中,Person类中的__hidden就是一个私有属性。
  4. 保护属性:以一个下划线开头的属性是保护属性,可以在类内部和子类中访问,但是不应该在类的实例外部进行访问。在上述例子中,Teacher类和Professor类中的_salary和_research_field就是保护属性。

方法的类型

Python中的方法可以分为四种类型:

  1. 类方法:定义在类中,使用@classmethod装饰器修饰。类方法的第一个参数是类本身(通常命名为cls),可以通过类名或实例名进行访问。在上述例子中,Person类中的get_count()就是一个类方法。
  2. 实例方法(共有方法):定义在类的实例中,第一个参数通常是self,可以通过实例名进行访问。在上述例子中,Person类、Teacher类和Professor类中的show_info()方法都是实例方法。
  3. 私有方法:以两个下划线开头的方法是私有方法,只能在类内部访问。在上述例子中,Person类中的__hidden_method()就是一个私有方法。
  4. 保护方法:以一个下划线开头的方法是保护方法,可以在类内部和子类中访问,但是不应该在类的实例外部进行访问。在上述例子中,Teacher类和Professor类中的_teach()和_research()就是保护方法。

下面是更新后的完整代码,包含类的继承和多态的应用,以及属性和方法的不同类型:

class Person:
    _count = 0  # 类属性

    def __init__(self, name, age):
        self._name = name  # 实例属性
        self._age = age

        Person._count += 1

    def show_info(self):
        print(f"I am {self._name}, {self._age} years old.")  # 实例方法

    @classmethod
    def get_count(cls):
        return cls._count  # 类方法

    def __hidden_method(self):
        print("This is a hidden method.")  # 私有方法


class Teacher(Person):
    def __init__(self, name, age, salary):
        super().__init__(name, age)
        self._salary = salary  # 保护属性

    def show_info(self):
        print(f"I am {self._name}, a teacher, {self._age} years old. My salary is {self._salary}.")  # 重写并覆盖了Person类的show_info方法

    def _teach(self):
        print("I am teaching.")  # 保护方法


class Professor(Person):
    def __init__(self, name, age, research_field):
        super().__init__(name, age)
        self._research_field = research_field  # 保护属性

    def show_info(self):
        print(f"I am {self._name}, a professor, {self._age} years old. My research field is {self._research_field}.")  # 重写并覆盖了Person类的show_info方法

    def _research(self):
        print("I am doing research.")  # 保护方法


# 创建Person类实例并调用实例方法
person = Person("Alice", 30)
person.show_info()

# 调用类方法
print(Person.get_count())

# 创建Teacher类实例并调用实例方法、保护方法
teacher = Teacher("Bob", 40, 5000)
teacher.show_info()
teacher._teach()

# 创建Professor类实例并调用实例方法、保护方法
professor = Professor("Charlie", 50, "Computer Science")
professor.show_info()
professor._research()

输出结果如下:

I am Alice, 30 years old.
1
I am Bob, a teacher, 40 years old. My salary is 5000.
I am teaching.
I am Charlie, a professor, 50 years old. My research field is Computer Science.
I am doing research.

可以看出,我们成功创建了三个不同的类,并使用它们的属性和方法来创建实例并进行操作。同时,我们也成功演示了属性和方法的不同类型及其使用方式。

相关推荐

python gui编程框架推荐以及介绍(python gui开发)

Python的GUI编程框架有很多,这里为您推荐几个常用且功能强大的框架:Tkinter:Tkinter是Python的标准GUI库,它是Python内置的模块,无需额外安装。它使用简单,功能较为基础...

python自动化框架学习-pyautogui(python接口自动化框架)

一、适用平台:PC(windows和mac均可用)二、下载安装:推荐使用命令行下载(因为会自动安装依赖库):pipinstallPyAutoGUI1该框架的依赖库还是蛮多的,第一次用的同学耐心等...

Python 失宠!Hugging Face 用 Rust 新写了一个 ML框架,现已低调开源

大数据文摘受权转载自AI前线整理|褚杏娟近期,HuggingFace低调开源了一个重磅ML框架:Candle。Candle一改机器学习惯用Python的做法,而是Rust编写,重...

Flask轻量级框架 web开发原来可以这么可爱呀~(建议收藏)

Flask轻量级框架web开发原来可以这么可爱呀大家好呀~今天让我们一起来学习一个超级可爱又实用的PythonWeb框架——Flask!作为一个轻量级的Web框架,Flask就像是一个小巧精致的工...

Python3使用diagrams生成架构图(python架构设计)

目录技术背景diagrams的安装基础逻辑关系图组件簇的定义总结概要参考链接技术背景对于一个架构师或者任何一个软件工程师而言,绘制架构图都是一个比较值得学习的技能。这就像我们学习的时候整理的一些Xmi...

几个高性能Python网络框架,高效实现网络应用

Python作为一种广泛使用的编程语言,其简洁易读的语法和强大的生态系统,使得它在Web开发领域占据重要位置。高性能的网络框架是构建高效网络应用的关键因素之一。本文将介绍几个高性能的Python网络框...

Web开发人员的十佳Python框架(python最好的web框架)

Python是一种面向对象、解释型计算机程序设计语言。除了语言本身的设计目的之外,Python的标准库也是值得大家称赞的,同时Python还自带服务器。其它方面,Python拥有足够多的免费数据函数库...

Diagram as Code:用python代码生成架构图

工作中常需要画系统架构图,通常的方法是通过visio、processon、draw.io之类的软件,但是今天介绍的这个软件Diagrams,可以通过写Python代码完成架构图绘制,确实很co...

分享一个2022年火遍全网的Python框架

作者:俊欣来源:关于数据分析与可视化最近Python圈子当中出来一个非常火爆的框架PyScript,该框架可以在浏览器中运行Python程序,只需要在HTML程序中添加一些Python代码即可实现。该...

10个用于Web开发的最好 Python 框架

Python是一门动态、面向对象语言。其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性。除了语言本身的设计目的之外,Python标准库也是值得大家称赞的,Python甚至还...

使用 Python 将 Google 表格变成您自己的数据库

图片来自Shutterstock,获得FrankAndrade的许可您知道Google表格可以用作轻量级数据库吗?GoogleSheets是一个基于云的电子表格应用程序,可以像大多数数据库管...

牛掰!用Python处理Excel的14个常用操作总结!

自从学了Python后就逼迫用Python来处理Excel,所有操作用Python实现。目的是巩固Python,与增强数据处理能力。这也是我写这篇文章的初衷。废话不说了,直接进入正题。数据是网上找到的...

将python打包成exe的方式(将python文件打包成exe可运行文件)

客户端应用程序往往需要运行Python脚本,这对于那些不熟悉Python语言的用户来说可能会带来一定的困扰。幸运的是,Python拥有一些第三方模块,可以将这些脚本转换成可执行的.exe...

对比Excel学Python第1练:既有Excel,何用Python?

背景之前发的文章开头都是“Python数据分析……”,使得很多伙伴以为我是专门分享Python的,但我的本意并非如此,我的重点还是会放到“数据分析”上,毕竟,Python只是一种工具而已。现在网上可以...

高效办公:Python处理excel文件,摆脱无效办公

一、Python处理excel文件1.两个头文件importxlrdimportxlwt其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入。2.读取exce...

取消回复欢迎 发表评论: