__all__ 这是一个字符串列表,定义在一个模块出口时使用 from <module> import * 将可以引用到什么变量,但对 import <module> 没有影响。 没有定义此语句,则 import * 默认的行为是导入所有的符号不以下划线开始的对象。 例如: a1.py 的内容如下: __all__=['b','c'] a='aaa' b='bbb' c='ccc' b1.py 的内容如下: import a1 from a1 import * print a1.a # 正常打印 print b # 正常打印 print a # 报错了,变量未定义 __call__ 类的调用 只要定义类的时候,实现 __call__ 函数,这个类型就成为可调用的。 换句话说,我们可以把这个类型的对象当作函数来使用,相当于 重载了括号运算符。 __del__ del 类名 # 调用对象的 __del__ 方法 __doc__ docstring 例: print(Person.__doc__) # 打印类的docstring print(Person.func_name.__doc__) # 打印类的方法的docstring __file__ 当前代码所在的Python模块的文件名。 例: import os, sys print( os.path.dirname(os.path.realpath(__file__)) ) # 获取当前目录 print( os.path.dirname(os.path.dirname(os.path.realpath(__file__))) ) # 获取上一层目录 print( os.path.dirname(os.path.abspath(sys.argv[0])) ) # 获取当前目录, sys.argv[0] 与 __file__ 一样显示当前文件名 print( os.getcwd() ) # 获取当前目录 print( os.path.abspath(os.curdir) ) # 获取当前目录 print( os.path.abspath( '. ') ) # 获取当前目录, 打印会加上点号,如: /home/holemar/project/ppf_web/. __init__ 类的构造方法 例: class Human(object): def __init__(self, name): print(name) class Person(Human): # Person 类继承 Human 类 def __init__(self, name): self.name = name # 对象的变量,每个对象独立的 super(Person, self).__init__(name) # 调用父类的 __init__ 方法,但这样的调用要求父类必须继承 object 类,或者继承其它的类 Human.__init__(self, "province") # 这样调用父类的 __init__ 方法也可以 __name__ 每个Python模块都有它的__name__,如果它是'__main__',这说明这个模块被用户单独运行,我们可以进行相应的恰当操作。 例: if __name__ == '__main__': print('This program is being run by itself') else: print('I am being imported from another module') __version__ 版本信息 例如: __version__ = '2.6.26' print( tuple(int(i) for i in __version__.split('.')) ) # 打印: (2, 6, 26) print( float(__version__) ) # 报错 运算符,如大于、小于、等于、加减乘除, 等等 class Field(object): def __init__(self, value): self.value = value # 小于: x < y, y > x def __lt__(self, value): print('__lt__ 被调用啦...') return self.value < value # 小于等于: x <= y, y >= x def __le__(self, value): return self.value <= value # x > y, y < x def __gt__(self, value): return self.value > value # x >= y, y <= x def __ge__(self, value): return self.value >= value # 等于: x == y def __eq__(self, value): return self.value == value # 不等于: x != y, x <> y def __ne__(self, value): return self.value != value # 加: x + y def __add__(self, value): return str(self.value) + ' + ' + str(value) # y + x def __radd__(self, value): return str(value) + ' + ' + str(self.value) # 减: x - y def __sub__(self, value): return str(self.value) + ' - ' + str(value) # y - x def __rsub__(self, value): return str(value) + ' - ' + str(self.value) # 乘: x * y def __mul__(self, value): return str(self.value) + ' × ' + str(value) # y * x def __rmul__(self, value): return str(value) + ' × ' + str(self.value) # 除: x / y def __div__(self, value): return str(self.value) + ' ÷ ' + str(value) # y / x def __rdiv__(self, value): return str(value) + ' ÷ ' + str(self.value) # 整除: x // y def __floordiv__(self, value): return str(self.value) + ' // ' + str(value) # y // x def __rfloordiv__(self, value): return str(value) + ' // ' + str(self.value) # python2里面不知道怎么调用这个函数,但python3没有了 __div__,除的时候直接调用此函数 def __truediv__(self, value): return str(self.value) + ' / ' + str(value) def __rtruediv__(self, value): return str(value) + ' / ' + str(self.value) # 单元运算符 # ~x def __invert__(self): return '~' + str(self.value) # -x def __neg__(self): return '-' + str(self.value) # +x def __pos__(self): return '+' + str(self.value) # x[y] def __getitem__(self, value): return 'this[' + str(value) + ']' # x[y] = z def __setitem__(self, key, value) self[key] = value # del x[y] def __delitem__(self, value): del self[value] # x[y:z] def __index__(self, y, z): return self[y:z] # 遍历 def __iter__(self): pass # y in x def __contains__(self, value): # in 判断,只能返回 True / False return False # x.name #def __getattribute__(self, value): # 覆盖此方法后,调用 self.value 会引起死循环 # return 'this.' + str(value) # 被特定函数调用时 # len(x) ,返回值必须大于或等于0 def __len__(self): return 1 # str(x) ,返回值必须是字符串 def __str__(self): return str(self.value) # unicode(x) def __unicode__(self): return unicode(self.value) # abs(x) def __abs__(self): return abs(self.value) # hash(x) def __hash__(self): return hash(self.value) # hex(x) def __hex__(self): return hex(self.value) # int(x) def __int__(self): return int(self.value) # long(x) def __long__(self): return long(self.value) # float(x) def __float__(self): return float(self.value) # oct(x) def __oct__(self): return oct(self.value) # cmp(x, y) def __cmp__(self, value): return cmp(self.value, value) # coerce(x, y) def __coerce__(self, value): return coerce(self.value, value) # divmod(x, y) def __divmod__(self, value): return divmod(self.value, value) # divmod(y, x) def __rdivmod__(self, value): return divmod(self.value, value) # pow(x, y[, z]) def __pow__(self, value): return pow(self.value, value[, z]) # pow(y, x[, z]) def __rpow__(self, value): return pow(self.value, value[, z]) # repr(x]) def __repr__(self, value): return repr(self.value) # size of S in memory, in bytes def __sizeof__(self, value): return 1 a = Field(32) print(a < 12) # 调用 a 的 __lt__ print(12 > a) # 调用 a 的 __lt__ print(a >= 17) print(a != 15) print(a == 32) print(a + 8) # 调用 a 的 __add__ print(8 + a) # 调用 a 的 __radd__ print(a * 8) # 调用 a 的 __mul__ print(8 * a) # 调用 a 的 __rmul__ print(a / 8) # python2时, 调用 a 的 __div__; python3时调用 __truediv__ print(~a) print(-a) print(+a) #print(a.name2) print(a['name3']) print('name' in a) print(len(a)) # 调用 a 的 __len__ print(str(a)) # 调用 a 的 __str__ 运算符表: 二元运算符 特殊方法 + __add__,__radd__ - __sub__,__rsub__ * __mul__,__rmul__ / __div__,__rdiv__,__truediv__,__rtruediv__ // __floordiv__,__rfloordiv__ % __mod__,__rmod__ ** __pow__,__rpow__ << _lshift__,__rlshift__ >> __rshift__,__rrshift__ & __and__,__rand__ ^ __xor__,__rxor__ | __or__,__ror__ += __iaddr__ -= __isub__ *= __imul__ /= __idiv__,__itruediv__ //= __ifloordiv__ %= __imod__ **= __ipow__ <<= __ilshift__ >>= __irshift__ &= __iand__ ^= __ixor__ |= __ior__ == __eq__ !=,<> __ne__ > __gt__ < __lt__ >= __ge__ <= __le__

浙公网安备 33010602011771号