Python中的特殊方法有哪些

  

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中的特殊方法有哪些