Python中的特殊方法有哪些?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<强>模拟数值类型强>
可以通过在自定义对象中实现__add__和__mul__等特殊方法,令其支持+、*等运算符。
如下面的模拟向量的向量类:
# vector.py 从数学导入函数的 类向量: def __init__(自我,x=0, y=0): 自我。x=x 自我。y=y def __repr__(自我): 返回f # 39;向量({自我。x}, {self.y}) & # 39; def __abs__(自我): 返回函数(自我。x, self.y) def __bool__(自我): 返回布尔值(自我。x或self.y) def __add__(自我,其他): 返回向量(自我。x +其他。x,自我。y + other.y) def __mul__(自我,标量): 返回向量(自我。x *标量,自我。y *标量)
运行效果如下:
祝辞祝辞祝辞从矢量进口
引用>
在祝辞祝辞v1=向量(2、4)
在祝辞祝辞v2=向量(2,1)
在祝辞祝辞v1 + v2向量(4、5)
在祝辞祝辞v=向量(3,4)
在祝辞祝辞abs (v) 5.0
在祝辞祝辞v * 3
向量(9日12)<强>对象的字符串表示强>
Python有一个repr内置函数,能把一个对象用字符串的形式表示出来。实际上这种字符串表达是通过对象内部的__repr__特殊方法定义的。默认情况下,在控制台里查看某个对象时,输出的字符串一般是& lt;在0 x7fc99d6ab2e0> xxx对象;这种形式。
__repr__返回的字符串应该准确,无歧义,并尽可能表示出该对象是如何创建的。比如前面的向量对象,其__repr__中定义的字符串形式类似于向量(3、4),和对象初始化的语法非常近似。
__repr__和__str__的区别在于,__str__是在向对象应用str()函数(或者用打印函数打印某个对象)时被调用。其返回的字符串对终端用户更友好。
如果只想实现其中一个特殊方法,__repr__应该是更优的选择。在对象没有实现__str__方法的情况下,Python解释器会用__repr__代替。
# myclass.py MyClass类: def __repr__(自我): 返回& # 39;myclass # 39; def __str__(自我): 返回& # 39;这是一个实例myclass # 39;在祝辞祝辞从myclass进口myclass 在在在我=MyClass () 在在在我的 MyClass 在在在打印(我) 这是一个实例MyClass<>强自定义布尔值强>
Python里有bool类型,但实际上任何对象都可以用在需要bool类型的上下文(比如如果或当语句)中。为了判断某个值x的真假,Python会调用bool (x)返回真或假。
默认情况下,自定义类的实例总是为真。除非这个类对于__bool__或__len__方法有自己的实现。
bool (x)实际上调用了对象x中的__bool__方法。如不存在__bool__方法,则bool (x)会尝试调用x.__len__(),返回0则为False,否则为真。# boolclass.py 类BoolClass: def __init__(自我): 自我。列表=[] def添加(自我,项): self.list.append(项) def __len__(自我): 返回len (self.list)在祝辞祝辞从boolclass进口boolclass 在在在b=BoolClass () 在在在len (b) 0 在在在bool (b) 假 在在在b.add (1) 在在在len (b) 1 在在在bool (b) 真正的# boolclass.py 类BoolClass: def __init__(自我): 自我。列表=[] def添加(自我,项): self.list.append(项) def __len__(自我): 返回len (self.list) def __bool__(自我): 返回布尔值(sum (self.list))在祝辞祝辞从boolclass进口boolclass 在在在b=BoolClass () 在在在b.add (1) 在在在len (b) 1 在在在bool (b) 真正的 在在在b.add (1) 在在在len (b) 2 在在在bool (b) 假关于Python中的特殊方法有哪些问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
Python中的特殊方法有哪些