通俗易懂详解Python基础五种下划线作用

以下是 “通俗易懂详解Python基础五种下划线作用”的完整攻略。

一、Python中的下划线

Python中的下划线有多种用途,包括变量名、函数名、类名等等。在Python中,下划线主要有五种不同的用法,分别是单前导下划线、单末尾下划线、双前导下划线、双前导双下划线和双前导后末尾双下划线。

二、单前导下划线

单前导下划线用来指示一个变量或者方法是“非公有的”,即不应该被外部使用。在Python中,没有真正的“私有”变量或方法,通过在变量或方法名前加上单前导下划线,可以起到隐藏其真正含义的作用,但是仍然可以从类外部访问这些属性。

示例代码:

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

    def get_name(self):
        return self._name

p = Person("Tom", 25)
print(p.get_name()) # 输出 Tom
print(p._name) # 输出 Tom

在上面的示例代码中,我们通过使用单前导下划线来指示 name 和 age 是私有属性。在类外可以使用 _name 来访问该属性,但是在类外最好使用 get_name 方法来访问 name 属性,以保证代码的封装性和可维护性。

三、单末尾下划线

单末尾下划线用来避免与Python关键字发生冲突。例如,如果你想把变量命名为“class”,你可以使用“class_”来避免语法错误。

示例代码:

class_ = "Python Basic"
print(class_)

输出:

Python Basic

四、双前导下划线

双前导下划线用来指示一个方法或属性是“私有的”。在使用双前导下划线定义的方法或属性只能在类的内部使用,而不可以在子类和类外部使用。如果在类外部使用,会抛出 AttributeError 异常。

示例代码:

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

    def __get_name(self):
        return self.__name

p = Person("Tom", 25)
print(p._Person__get_name()) # 输出 Tom
print(p.__name) # 抛出 AttributeError 异常

在上面的示例代码中,我们使用双前导下划线来定义 __name__age 两个私有属性,在类内部使用 __get_name 方法来访问 __name 属性,在类外无法直接访问 __name 属性,如果在类外使用会抛出 AttributeError 异常。

五、双前导双下划线

双前导双下划线用来避免子类覆盖父类的方法,在子类中同名方法会覆盖父类的同名方法。通过在方法名前添加双前导下划线,可以使方法成为私有方法,从而在子类中避免被覆盖。

示例代码:

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

    def __get_name(self):
        return self.__name

    def get_name(self):
        return self.__get_name()

class Student(Person):
    def __get_name(self):
        return "Student's Name: "+ self._Person__get_name()

s = Student("Tom")
print(s.get_name()) # 输出 Student's Name: Tom

在上面的示例代码中,我们创建了一个 Person 类,并在其中定义了私有方法 __get_name 和公有方法 get_name。在子类 Student 中同样定义了同名方法 __get_name,但是由于它被定义成了私有方法,所以不会覆盖父类中的同名方法,最终在执行 s.get_name() 时,执行的是子类 Student 中的私有方法,返回的是 "Student's Name: Tom"。

六、双前导和末尾双下划线

双前导和末尾双下划线的作用是用来命名 Python 的“魔术方法”。这些方法在Python中有特殊的含义,例如 __init____str____repr__ 等等。其中,__init__ 方法用来初始化实例对象,在创建新对象后执行;__str____repr__ 方法用来指示 Python 怎样打印对象,输出对象的文本信息。

示例代码:

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

    def __str__(self):
        return "Person's Name: " + self.__name

p = Person("Tom")
print(p) # 输出 Person's Name: Tom

在上面的示例代码中,我们定义了一个 __str__ 方法,用来指示 Python 打印对象时应该输出的文本信息。当我们执行 print(p) 时,输出的是 "Person's Name: Tom"。

七、总结

上面介绍的就是Python中下划线的五个作用。其中,单前导下划线和双前导下划线用来指示私有属性或方法;单末尾下划线用来避免关键字冲突;双前导双下划线用来避免子类中同名方法覆盖父类中同名方法;双前导和末尾双下划线用来命名 Python 的魔术方法。

在编写代码时,应该根据实际情况使用合适的下划线,以便代码更加规范、易懂、易于维护。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通俗易懂详解Python基础五种下划线作用 - Python技术站

(0)
上一篇 2023年6月5日
下一篇 2023年6月5日

相关文章

  • Python之string编码问题

    Python之string编码问题攻略 在Python中,字符串(string)是一种重要的数据类型,然而在处理字符串时,字符编码问题就变得非常重要。不同的编码系统可能会对同一个字符串产生不同的字符编码,因此需要了解Python的string编码问题。这里将介绍几个经典的Python中的字符编码问题,并提供一些解决方案。 1. Unicode和ASCII码 …

    python 2023年5月20日
    00
  • Python流程控制 if else实现解析

    Python流程控制if-else实现解析 if-else是Python中常用的流程控制语句,可以根据条件执行不同的代码块。本文将详细介绍if-else语句的使用方法,并提供两个示例。 if-else语句的基本用法 if-else语句的基本用法如下: if condition: # 如果条件成立,执行这里的代码块 else: # 如果条件不成立,执行这里的代…

    python 2023年5月15日
    00
  • python批量查询、汉字去重处理CSV文件

    下面是关于“Python批量查询、汉字去重处理CSV文件”的完整攻略: 一、准备工作1. 安装Python2. 安装需要用到的第三方库:pandas、jieba、re 可以通过以下代码进行安装: pip install pandas pip install jieba pip install regex 二、代码实现1. 批量查询 针对批量查询,我们可以使用…

    python 2023年6月3日
    00
  • python使用HTMLTestRunner导出饼图分析报告的方法

    Python使用HTMLTestRunner导出饼图分析报告的方法 在本文中,我们将介绍如何使用Python使用HTMLTestRunner库导出饼图分析报告。我们将使用unittest库编写测试用例,使用HTMLTestRunner库生成测试报告,并使用matplotlib库生成饼图。以下是详细的步骤和示例。 步骤1:安装必要的库 在使用Python使用H…

    python 2023年5月15日
    00
  • PyQtGraph在pyqt中的应用及安装过程

    PyQtGraph是一个基于PyQt和Numpy的图形库,它可以用于科学数据可视化等领域。在PyQt中使用PyQtGraph可以通过PyQtGraph的Qt对象进行交互和绘制,本攻略将详细讲解PyQtGraph在PyQt中的应用及安装过程。 安装PyQtGraph 安装PyQtGraph可以使用pip命令进行安装,命令如下: pip install pyqt…

    python 2023年5月14日
    00
  • python通过线程实现定时器timer的方法

    Python通过线程实现定时器Timer的方法可以采用Python标准库中的threading模块,通过继承threading.Thread类并重写run()方法,实现定时器功能。 具体步骤如下: 步骤一:引入threading模块。 import threading 步骤二:定义一个继承threading.Thread类的新类。 class TimerTh…

    python 2023年5月19日
    00
  • python语法之通过value找key问题

    对于Python中的字典类型,我们可以通过键值对的方式存储和访问数据。有时候我们需要通过值来找到对应的键,本文将详细讲解如何实现这个功能。 方法一:使用循环遍历字典 Python中的字典类型可以使用for…in循环遍历。我们可以遍历字典的元素,找到与目标值相同的元素,并返回对应的键。以下是示例代码: my_dict = {‘apple’: 1, ‘ban…

    python 2023年6月3日
    00
  • Python实现队列的方法示例小结【数组,链表】

    Python实现队列的方法示例小结 什么是队列 队列是一种数据结构,它基于先进先出 (FIFO) 的原则,数据元素的插入是在队列的末尾进行,数据元素的删除是在队列的头部进行。 队列的应用场景 队列的应用场景非常广泛,例如: 操作系统中的任务调度; 网络传输中的数据包传输; 生产者消费者问题; 页面请求缓存等。 Python实现队列的方法 数组实现队列 数组实…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部