关于python:详解Python单下划线和双下划线使用

11次阅读

共计 2447 个字符,预计需要花费 7 分钟才能阅读完成。

在 Python 编程中,咱们常常会遇到单下划线(_)和双下划线(__)的应用。它们在命名标识符、变量、办法和属性中扮演着不同的角色。本文将具体解释 Python 中单下划线和双下划线的含意和用法,并通过代码示例进行解说,帮忙你了解它们的作用和实用场景。

一、单下划线(_)的应用

  1. 命名约定。在 Python 中,单下划线作为命名约定,用于示意某个变量、办法或属性是外部应用的或具备特定含意,但不心愿在内部间接拜访。

代码示例:

# 单下划线作为命名约定
class MyClass:
    def __init__(self):
        self._internal_var = 42

    def _internal_method(self):
        return "Internal method"

    def public_method(self):
        return self._internal_method()

在下面的例子中,变量_internal_var 和办法_internal_method 都以单下划线结尾。这是一种约定,通知其余开发人员这些成员是类外部应用的,不倡议在类内部间接拜访。公共办法 public_method 能够拜访外部办法_internal_method。

  1. 防止命名抵触。单下划线还能够用于防止命名抵触。当咱们在导入模块时,能够应用单下划线作为前缀,以防止与以后命名空间中的其余标识符抵触。

代码示例:

# 防止命名抵触
from mymodule import my_function, _internal_function

在下面的例子中,通过应用单下划线前缀导入_internal_function 函数,咱们能够明确指定该函数是模块的外部应用,而不是公共接口。

  1. 长期变量。在一些状况下,咱们可能只须要长期应用某个变量,而不关怀它的具体值。此时,能够应用单下划线作为变量名,示意它是一个无关紧要的长期变量。

代码示例:

# 应用单下划线作为长期变量
for _ in range(5):
    print("Hello!")

在下面的例子中,循环变量被命名为单下划线,这通知其余开发人员循环变量的具体值并不重要,只须要执行循环体内的代码 5 次即可。

  1. 引入未应用的变量。有时候,在编码过程中咱们可能会定义一些变量,但在后续的代码中并没有应用它们。为了避免出现未应用变量的正告,能够应用单下划线作为变量名。

代码示例:

# 引入未应用的变量
_, y, _ = (1, 2, 3)

在下面的例子中,咱们应用单下划线占位符引入了一个未应用的变量。这样做能够通知读者,咱们在意识到该变量存在但并不关怀它的具体值。

二、双下划线(__)的应用

  1. 名称润饰。双下划线用于名称润饰,行将属性或办法后面的双下划线作为前缀,使其成为公有成员。公有成员只能在类外部拜访,无奈在类内部间接拜访。

代码示例:

# 双下划线作为名称润饰
class MyClass:
    def __init__(self):
        self.__private_var = 42

    def __private_method(self):
        return "Private method"

    def public_method(self):
        return self.__private_method()

obj = MyClass()
print(obj.public_method())  # 输入:Private method
print(obj.__private_var)  # 报错:AttributeError: 'MyClass' object has no attribute '__private_var'

在下面的例子中,属性__private_var 和办法__private_method 都以双下划线结尾,它们被视为公有成员。在类内部无奈间接拜访公有成员,但能够通过公共办法 public_method 间接拜访。

  1. 名称改写。双下划线还可用于名称改写(name mangling),行将属性或办法后面的双下划线和类名组合起来,以避免子类意外笼罩父类的属性或办法。

代码示例:

# 名称改写
class BaseClass:
    def __init__(self):
        self.__private_var = 42

class DerivedClass(BaseClass):
    def __init__(self):
        super().__init__()
        self.__private_var = 10  # 不会改写父类的公有属性

obj = DerivedClass()
print(obj._BaseClass__private_var)  # 输入:42
print(obj._DerivedClass__private_var)  # 输入:10

在下面的例子中,BaseClass 定义了一个公有属性__private_var,DerivedClass 继承自 BaseClass 并定义了一个同名的公有属性。通过名称改写,咱们能够别离拜访父类和子类的公有属性。

  1. 魔术办法。双下划线在魔术办法中也扮演着重要的角色。魔术办法是一种非凡的办法,用于在特定状况下主动调用,从而实现对对象的特定行为进行定制。

代码示例:

# 魔术办法
class MyClass:
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return f"MyClass object (name: {self.name})"

obj = MyClass("Alice")
print(obj)  # 输入:MyClass object (name: Alice)

在下面的例子中,__str__是一个魔术办法,用于在应用 print 函数打印对象时主动调用。通过重写__str__办法,咱们能够自定义对象的字符串示意模式。

三、总结

本文具体解释了 Python 中单下划线和双下划线的应用。单下划线作为命名约定、防止命名抵触、长期变量和引入未应用的变量等方面发挥作用。双下划线用于名称润饰、名称改写和在魔术办法中表演重要角色。把握单下划线和双下划线的应用,将帮忙你更好地了解和利用 Python 编程中的命名约定、代码组织和对象行为定制。

正文完
 0