@spiritnotes
2016-07-23T16:05:34.000000Z
字数 933
阅读 2112
Python DONE
Python的命名规则中大量使用下划线,使用厂家不同具有不同的含义
_作为交互解释器中执行语句的返回结果。
>>> i = 1>>> _4>>> 3*412>>> _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__fprint(self._A__f())def f(self):self.__f()b = B()# b.__f() 外层不能调用该函数b.f()b._B__f()b._A__f()dir(b)
结果如下:
B.fA.f#B.fA.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.fA.f[...'__f__',...]
