通俗易懂详解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的13个理由

    当学习编程语言时,选择一门合适的语言非常重要。Python是一种具有多用途的高级编程语言,其成为许多应用程序和网站的首选语言。以下是使用Python的13个理由: 1.容易学习 Python语法简单、结构清晰,类似于英语,易于理解和学习。即使没有编程经验,也可以轻松入门。 2.广泛的应用范围 Python可以用于Web开发、数据科学、人工智能、机器学习、游戏…

    python 2023年5月19日
    00
  • 一文带你了解Python与svg之间的操作

    一文带你了解Python与svg之间的操作 SVG(Scalable Vector Graphics),即可缩放矢量图形,是一种基于 XML 格式的图像标准。Python作为一种强大的编程语言,能够运用Python编写svg图形,也可以利用Python的库来操作svg图形。 本文将带领大家了解Python与svg之间的操作,包括Python如何生成SVG、S…

    python 2023年6月3日
    00
  • Python如何设置换行输出?Python换行输出的方法

    下面我将为您详细讲解Python中如何设置换行输出以及Python换行输出的方法。 Python换行输出的方法 通过\n实现换行输出 我们可以通过在字符串中插入一个换行符(\n),来实现在输出时的换行。 以下是一个使用换行符实现换行输出的例子: print("Hello,\nWorld!") 运行这段代码,你会发现在输出 “Hello,”…

    python 2023年6月5日
    00
  • python爬取网页转换为PDF文件

    在Python中,可以使用pdfkit和wkhtmltopdf库将网页转换为PDF文件。以下是Python爬取网页转换为PDF文件的详细攻略: 安装pdfkit和wkhtmltopdf 要使用pdfkit和wkhtmltopdf,需要先安装这两个库。可以使用pip安装pdfkit库。以下是安装pdfkit和wkhtmltopdf的示例: pip instal…

    python 2023年5月14日
    00
  • 使用python在特定条件下将文本添加到PDF文件名

    【问题标题】:Adding text to PDF file name under specific conditions using python使用python在特定条件下将文本添加到PDF文件名 【发布时间】:2023-04-07 21:33:01 【问题描述】: 我正在尝试在特定条件下编辑 pdf 的文件名。 名称是根据输入数据库的数字生成的(不可更…

    Python开发 2023年4月8日
    00
  • 如何在 Redis 中使用 Lua 脚本?

    如何在 Redis 中使用 Lua 脚本? Redis 是一种高性能的键值存储数据库,支持多种数据结构和高级功能。其中,Lua 脚本是 Redis 的一个重要功能,可以在 Redis 服务器端脚本,实现复杂的业务逻辑。在本文中,我们将介绍如何在 Redis 中使用 Lua 脚本,包括编写 Lua 、执行 Lua 脚本、传递参数等操作。 步骤1:连接 Redi…

    python 2023年5月12日
    00
  • 浅谈python requests 的put, post 请求参数的问题

    以下是关于Python requests的PUT、POST请求参数的问题的攻略: 浅谈Python requests的PUT、POST请求参数的问题 在使用Python requests库发送PUT、POST请求时,需要设置请求参数。以下是浅谈Python requests的PUT、POST请求参数的问题的攻略。 PUT请求参数 使用Python reque…

    python 2023年5月15日
    00
  • Python 中类的构造方法 __New__的妙用

    Python中类的构造方法__new__的妙用 在Python中,类的构造方法__new__是一个非常重要的方法,它在对象创建之前被调用,用于创建并返回一个新的对象实例。本文将详细介绍__new方法的妙用,包括何使用__new__方法实现单例模式、如何使用__new__方法实现对象池等。 什么是__new__方法 在Python中类的构造方法__new__是…

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