@songying
2018-07-11T16:53:45.000000Z
字数 1074
阅读 1035
python特殊方法
参考: http://pyzh.readthedocs.io/en/latest/python-magic-methods-guide.html
使用字符串来表示类是一个相当有用的特性。在Python中有一些内建方法可以返回类的表示,相对应的,也有一系列魔法方法可以用来自定义在使用这些内建函数时类的行为。
__str__(self)
定义对类的实例调用 str() 时的行为。
__repr__(self)
定义对类的实例调用 repr() 时的行为。
如果没有实现 repr,当我们在控制台里打印一个向量的实例时,得到的字符串可能会是 <Vector object at 0x10e100070>
__str__
与 __repr__
__repr__
和 __str__
的区别在于,后者是在 str() 函数被使用,或是在用 print 函数打印一个对象的时候才被调用的,并且它返回的字符串对终端用户更友好。
如果你只想实现这两个特殊方法中的一个,__repr__
是更好的选择,因为如果一个对象
没有 __str__
函数,而 Python 又需要调用它的时候,解释器会用 repr 作为替代。
str() 和 repr() 最主要的差别在于“目标用户”。
__format__(self)
定义当类的实例用于新式字符串格式化时的行为.
例如,“Hello, 0:abc!”.format(a)
会导致调用 a.__format__(“abc”)
。
当定义你自己的数值类型或字符串类型时,你可能想提供某些特殊的格式化选项,这种情况下这个魔法方法会非常有用。
__hash__(self)
定义对类的实例调用 hash() 时的行为。它必须返回一个整数,其结果会被用于字典中键的快速比较。
同时注意一点,实现这个魔法方法通常也需要实现 eq ,并且遵守如下的规则: a == b 意味着 hash(a) == hash(b)。
__nonzero__(self)
定义对类的实例调用 bool()
时的行为,根据你自己对类的设计,针对不同的实例,这个魔法方法应该相应地返回True或False。
__dir__(self)
定义对类的实例调用 dir() 时的行为,这个方法应该向调用者返回一个属性列表。一般来说,没必要自己实现 __dir__
。但是如果你重定义了 __getattr__
或者 __getattribute__
,乃至使用动态生成的属性,以实现类的交互式使用,那么这个魔法方法是必不可少的。