Python中前单下划线的意义
在Python中,使用一个下划线作为变量名的前缀是一种约定,表示这是一个 私有变量。这意味着这个变量仅限于它所在的 模块 或 类 内部使用,而不能被其他代码直接访问。以下是一个例子:
class MyClass:
def __init__(self):
self._my_variable = 42
def my_method(self):
print(self._my_variable)
obj = MyClass()
obj.my_method()
print(obj._my_variable) # 这里会抛出 AttributeError
在这个例子中,我们声明了一个名为 _my_variable 的私有变量。在 MyClass 的内部使用它是没有问题的,但是在外部访问时会抛出 AttributeError 错误。
需要注意的是,Python 中的私有变量仅仅是一种约定,而不是强制执行的规则,因此可以通过类名来访问私有变量:
obj = MyClass()
print(obj._MyClass__my_variable) # 打印 42
这里的 __my_variable 实际上变成了 _MyClass__my_variable,这是一种名称修饰的方式,让私有变量在外部更难被访问。
Python中前双下划线的意义
在 Python 中,使用两个下划线作为变量名的前缀是一种约定,表示这是一个特殊的 Python 内置函数。例如,我们可以定义一个名为 __len__ 的方法来返回对象的长度,这个方法可以用于内置函数 len()。
class MyList:
def __init__(self, data):
self.data = data
def __len__(self):
return len(self.data)
my_list = MyList([1, 2, 3])
print(len(my_list)) # 打印 3
在这个例子中,我们重写了 __len__ 方法,并使用 len() 函数来调用它。
需要注意的是,Python 中的双下划线方法具有特殊的含义,因此不应该随意定义。对于大多数开发者来说,只需要了解 Python 内置函数的双下划线方法,就可以正确地使用它们。
Python中前后双下划线的意义
在 Python 中,使用双下划线作为变量名的前缀和后缀是一种约定,表示这是一个特殊的 魔术方法,也叫 特殊方法。这些方法用于实现 Python 语言的特殊语法和行为。以下是一些常见的魔术方法:
__init__(self, ...):对象初始化方法,在创建对象时被自动调用。
__repr__(self):对象的“[可打印] (https://docs.python.org/3/reference/datamodel.html#object.__repr__)”版本,用于调试。
__add__(self, other):对象加法运算方法,可以使用加号运算符。
__eq__(self, other):对象相等比较方法,可以使用等号运算符。
以下是一个使用魔术方法的例子:
class MyList:
def __init__(self, data):
self.data = data
def __repr__(self):
return str(self.data)
def __add__(self, other):
return MyList(self.data + other.data)
list1 = MyList([1, 2, 3])
list2 = MyList([4, 5, 6])
print(list1 + list2) # 打印 [1, 2, 3, 4, 5, 6]
在这个例子中,我们定义了 __repr__ 和 __add__ 两个魔术方法。__repr__ 方法返回 MyList 对象的 [可打印] 版本,__add__ 方法实现了对象的加法运算。
需要注意的是,使用双下划线作为前后缀的变量名具有特殊的含义,因此不应该随意定义。对于大多数开发者来说,只需要了解 Python 内置的魔术方法,就可以正确地使用它们。