首页 > 编程语言 >Python中的方法重写与名称修饰

Python中的方法重写与名称修饰

时间:2023-07-18 17:12:17浏览次数:33  
标签:子类 Python 方法 名称 Child 修饰 重写 method

Python中的方法重写与名称修饰
今天写python系统的时候,发现父类怎么老是调用不了子类重写的方法,整了好久才发现,python的名称修饰机制,好久没写代码了,这一块知识点忘干净了,下面进行总结。

在Python中,方法重写是面向对象编程中的重要概念,它允许子类对父类的方法进行重新定义以满足子类特有的需求。然而,在方法重写过程中,有一个有趣的机制称为名称修饰(name mangling),它影响了以双下划线开头的方法名。在本篇博客中,我们将探讨Python中的方法重写和名称修饰的工作原理和使用方法。

1. 方法重写(Method Overriding)
方法重写是指在子类中重新定义一个与父类方法名称相同的方法。这样,当通过子类对象调用该方法时,将执行子类中的方法而不是父类中的方法。方法重写使得子类可以自定义和修改父类方法的行为,实现更灵活和具有特定功能的子类。

示例:

class Parent:
    def some_method(self):
        print("Parent's method")

class Child(Parent):
    def some_method(self):  # 方法重写
        print("Child's method")

child_obj = Child()
child_obj.some_method()  # 输出:"Child's method"

2. 名称修饰(Name Mangling)
名称修饰是Python中用于避免子类意外地覆盖父类方法或属性的机制。当方法或属性的名称以双下划线__开头时,Python会在名称前面添加一个下划线和类名,形成_类名__方法名的形式。这样,即使子类定义了与父类同名的方法,实际上它们的名称并不相同,从而避免了冲突。

示例:

class Parent:
    def __some_method(self):  # 名称修饰
        print("Parent's method")

class Child(Parent):
    def __some_method(self):  # 名称修饰后,实际上成为 _Child__some_method
        print("Child's method")

child_obj = Child()
child_obj._Child__some_method()  # 输出:"Child's method"

3. 以单下划线_开头的方法名
在Python中,以单下划线_开头的方法名并不会触发名称修饰机制。这样的方法被视为内部实现细节,建议在外部使用时要谨慎。子类可以定义以单下划线开头的方法,并且与父类的同名方法不会发生冲突。

示例:

class Parent:
    def _some_method(self):  # 以单下划线开头,不触发名称修饰
        print("Parent's method")

class Child(Parent):
    def _some_method(self):  # 不触发名称修饰,与父类的 _some_method 不冲突
        print("Child's method")

child_obj = Child()
child_obj._some_method()  # 输出:"Child's method"

总结
方法重写是Python中面向对象编程的重要特性,允许子类重新定义父类的方法以实现个性化的功能。名称修饰是一种机制,用于避免子类意外地覆盖父类方法或属性,通过在名称前添加_类名来解决命名冲突问题。此外,以单下划线开头的方法名不会触发名称修饰,但应谨慎使用,避免对外部代码造成意外影响。了解方法重写和名称修饰的原理,将有助于编写更具灵活性和清晰性的Python类和继承关系。

标签:子类,Python,方法,名称,Child,修饰,重写,method
From: https://www.cnblogs.com/zekaiblogs/p/17563501.html

相关文章

  • Python获取文件夹下文件夹的名字,并存excel为一列(方法一)
    大家好,我是皮皮。一、前言这个事情还得从前几天在Python最强王者群【东哥】问了一个Python自动化办公处理的问题,需求倒是不难,一起来看看吧。二、实现过程这里【wangning】又给了一个答案,他自己之前整理的文章,不过需要自己稍微修改下才行。后来【魏哥】看到了,并且给出了如下......
  • 如何使用python计算复杂三角函数
    当涉及到计算复杂的三角函数时,Python提供了强大的数学库和函数来帮助我们进行计算。在本篇博客中,我将介绍如何使用Python来计算复杂的三角函数。首先,我们需要导入Python的math模块,它提供了许多数学函数和常量。你可以使用以下代码导入math模块:importmath接下来,让我......
  • Python pandas.DataFrame.iat函数方法的使用
    DataFrame.iat按整数位置访问行/列对的单个值。与iloc类似,两者都提供基于整数的查找。如果只需要在DataFrame或Series中获取或设置一个值,则使用iat。Raises:当整数位置超出界限时抛出IndexError例子:>>>df=pd.DataFrame([[0,2,3],[0,4,1],[10,20,30]],.......
  • python 声波 通信 源代码
    Python声波通信简介在现代科技发展的今天,我们已经习惯了通过网络进行通信,例如使用电子邮件、即时通讯应用或者社交媒体。但是,除了这些常见的通信方式之外,还存在一种古老而有趣的通信方式,那就是声波通信。声波通信是利用声音波动传播的特性进行信息传递的一种方式。通过将信息转化......
  • python 设置系统变量
    Python设置系统变量在Python编程中,我们经常需要设置系统变量来配置程序的运行环境。系统变量是一些全局的配置参数,可以在整个操作系统中使用。Python提供了多种方式来设置系统变量,本文将介绍其中的几种常用方法,并提供相应的代码示例。方法一:使用os模块Python标准库中的os模块提......
  • python 删除数组 空值
    Python删除数组空值的步骤在Python中,删除数组中的空值可以通过以下步骤完成。下面是一个简单的流程表格,显示了实现这个功能的步骤和相应的代码:步骤代码1.导入必要的模块和库importnumpyasnp2.创建一个包含空值的数组arr=np.array(['','hello','','world'......
  • python 删除列表中字符串
    Python删除列表中的字符串在使用Python进行编程时,经常需要对列表进行操作和修改。有时候,我们可能需要删除列表中的特定字符串。本文将介绍如何使用Python删除列表中的字符串,并提供代码示例。列表和字符串在了解如何删除列表中的字符串之前,我们需要先了解列表和字符串的基本概念......
  • python 三维地球
    实现Python三维地球简介Python是一种功能强大的编程语言,可以用于创建各种类型的应用程序和可视化效果。本文将向你介绍如何使用Python创建一个三维地球。步骤下面是实现Python三维地球的步骤:步骤描述1导入必要的库2创建地球模型3设置地球材质4设置相机......
  • Python与UIAutomator测试
    1.APP测试UI测试:导航测试,图形测试,内容测试功能测试性能测试:响应能力测试(安装卸载功能性操作),压力测试(反复/长期)兼容性测试安全测试:发送信息拨打电话链接网络访问手机信息联系人信息设置权限;执行某些操作时导致的输入有效性验证授权数据加密;将网络协议的测试,防止恶......
  • Python基础(2)
    if语句给出一个简单的示例cars=["audi","bmw","subaru","toyota"]forcarincars:ifcar=="bmw":print(car.upper())else:print(car.title())每条if语句的核心都是一个值为True或False的表达式,这种表达式称为条件测......