[英]How to overload numeric operators in Python
我最近正在使用Python,并且想使用另一种查找平方根的方法。 例如,我想用牛顿-拉夫森逼近法找到n的平方根。 我需要重载**
(仅当您将数字提高到0.5时) math.sqrt()
,以及math.sqrt()
和math.sqrt()
,因为我有几个较旧的项目可以通过这样做并替换所有math.sqrt()
来加速math.sqrt()
和**(0.5)
以及另一个函数并不理想。
可以用Python完成吗?
是否可以使**
或math.sqrt
?
任何有用的链接也非常感谢。
def Square_root(n):
r = n/2
while(abs(r-(n/r)) > t):
r = 0.5 * (r + (n/r))
return r
print(2**(0.5)) ## changes to print(Square_root(2))
print(math.sqrt(2)) ## that also becomes print(Square_root(2))
简而言之:对于内置类型,您无法更改__pow__
的行为。
长答案:您可以将float
子类化,但是它需要对程序的输入值进行额外的编码和重构,使其具有覆盖了运算符和函数的新float
类。
并且您可以覆盖math.sqrt
,但是不建议这样做 :
import math
math.sqrt = lambda x, y: print(x, y)
math.sqrt(3, 2)
# 3 2
这将要求自定义函数具有相同的签名。
如果您真的想重载int和float对象的语言,则可以使用魔术函数的变体。 为了保持一致,您必须编写很多代码。
大量的工作。 Python适用于懒惰的人-如果您想写很多东西,请坚持使用Java或C ++ :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.