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

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

off999 2024-10-25 13:44 21 浏览 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.

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

相关推荐

面试官:来,讲一下枚举类型在开发时中实际应用场景!

一.基本介绍枚举是JDK1.5新增的数据类型,使用枚举我们可以很好的描述一些特定的业务场景,比如一年中的春、夏、秋、冬,还有每周的周一到周天,还有各种颜色,以及可以用它来描述一些状态信息,比如错...

一日一技:11个基本Python技巧和窍门

1.两个数字的交换.x,y=10,20print(x,y)x,y=y,xprint(x,y)输出:102020102.Python字符串取反a="Ge...

Python Enum 技巧,让代码更简洁、更安全、更易维护

如果你是一名Python开发人员,你很可能使用过enum.Enum来创建可读性和可维护性代码。今天发现一个强大的技巧,可以让Enum的境界更进一层,这个技巧不仅能提高可读性,还能以最小的代价增...

Python元组编程指导教程(python元组的概念)

1.元组基础概念1.1什么是元组元组(Tuple)是Python中一种不可变的序列类型,用于存储多个有序的元素。元组与列表(list)类似,但元组一旦创建就不能修改(不可变),这使得元组在某些场景...

你可能不知道的实用 Python 功能(python有哪些用)

1.超越文件处理的内容管理器大多数开发人员都熟悉使用with语句进行文件操作:withopen('file.txt','r')asfile:co...

Python 2至3.13新特性总结(python 3.10新特性)

以下是Python2到Python3.13的主要新特性总结,按版本分类整理:Python2到Python3的重大变化Python3是一个不向后兼容的版本,主要改进包括:pri...

Python中for循环访问索引值的方法

技术背景在Python编程中,我们经常需要在循环中访问元素的索引值。例如,在处理列表、元组等可迭代对象时,除了要获取元素本身,还需要知道元素的位置。Python提供了多种方式来实现这一需求,下面将详细...

Python enumerate核心应用解析:索引遍历的高效实践方案

喜欢的条友记得关注、点赞、转发、收藏,你们的支持就是我最大的动力源泉。根据GitHub代码分析统计,使用enumerate替代range(len())写法可减少38%的索引错误概率。本文通过12个生产...

Python入门到脱坑经典案例—列表去重

列表去重是Python编程中常见的操作,下面我将介绍多种实现列表去重的方法,从基础到进阶,帮助初学者全面掌握这一技能。方法一:使用集合(set)去重(最简单)pythondefremove_dupl...

Python枚举类工程实践:常量管理的标准化解决方案

本文通过7个生产案例,系统解析枚举类在工程实践中的应用,覆盖状态管理、配置选项、错误代码等场景,适用于Web服务开发、自动化测试及系统集成领域。一、基础概念与语法演进1.1传统常量与枚举类对比#传...

让Python枚举更强大!教你玩转Enum扩展

为什么你需要关注Enum?在日常开发中,你是否经常遇到这样的代码?ifstatus==1:print("开始处理")elifstatus==2:pri...

Python枚举(Enum)技巧,你值得了解

枚举(Enum)提供了更清晰、结构化的方式来定义常量。通过为枚举添加行为、自动分配值和存储额外数据,可以提升代码的可读性、可维护性,并与数据库结合使用时,使用字符串代替数字能简化调试和查询。Pytho...

78行Python代码帮你复现微信撤回消息!

来源:悟空智能科技本文约700字,建议阅读5分钟。本文基于python的微信开源库itchat,教你如何收集私聊撤回的信息。[导读]Python曾经对我说:"时日不多,赶紧用Python"。于是看...

登录人人都是产品经理即可获得以下权益

文章介绍如何利用Cursor自动开发Playwright网页自动化脚本,实现从选题、写文、生图的全流程自动化,并将其打包成API供工作流调用,提高工作效率。虽然我前面文章介绍了很多AI工作流,但它们...

Python常用小知识-第二弹(python常用方法总结)

一、Python中使用JsonPath提取字典中的值JsonPath是解析Json字符串用的,如果有一个多层嵌套的复杂字典,想要根据key和下标来批量提取value,这是比较困难的,使用jsonpat...

取消回复欢迎 发表评论: