@spiritnotes
2016-07-23T16:05:34.000000Z
字数 933
阅读 1994
Python
DONE
Python的命名规则中大量使用下划线,使用厂家不同具有不同的含义
_作为交互解释器中执行语句的返回结果。
>>> i = 1
>>> _
4
>>> 3*4
12
>>> _
12
>>> begin, _, _, end = (1, 2, 3, 4)
>>> for _ in l:
do()
from django.utils.translation import ugettext as _
def ...():
ouput = _('welcome')
指定该函数或者方法是私有的
对解释器有特殊意义,Python会改写这些名称,避免与子类冲突。其在文本上会被替换成为_classname__spam等格式。在派生子类中要访问该变量值,则需要进行部分trick
class A:
def __f(self):
print('A.f')
class B(A):
def __f(self):
print('B.f')
# print(super().__f()) # 改行会出错,里面的__f()会被替换为_B__f
print(self._A__f())
def f(self):
self.__f()
b = B()
# b.__f() 外层不能调用该函数
b.f()
b._B__f()
b._A__f()
dir(b)
结果如下:
B.f
A.f
#
B.f
A.f
#
A.f
#
['_A__f',
'_B__f',
...]
这些是python的特殊方法名,是一种惯例,避免python系统中的名称不会于用户自定义的名称发生冲突,系统中大量域定义操作都是通过该方式的函数实现的。可以对该方法进行改写。
class A:
def __f__(self):
print('A.f')
class B(A):
def __f__(self):
print('B.f')
print(super().__f__()) # 该处正常执行
b = B()
b.__f__()
dir(b)
结果如下
B.f
A.f
[...
'__f__',
...]