我正在构建一个类型(dual numbers)并且无法找到使它们在算术表达式中表现良好的方法,就像Python中的复数一样:
@feed_items = current_user.feed.paginate(page: params[:page])
就我而言:
>>> 2 + 3 + 7j
>>> 5 + 7j
我可以很容易地使它工作,操纵__add__方法,另一种方式:我的类型+内置。我也可以做外部函数添加和传递参数,但显然,很好地与' +'好多了。
提前致谢。
PS哪里可以找到Python模块的源代码(我可以自己查看一个复杂的类)?
答案 0 :(得分:0)
Python中没有自动类型转换为用户定义的类型。
您需要实施方法_add__
和__radd__
,__sub__
和__rsub__
等来模拟数字类型的行为。
请参阅the Language Reference,了解您需要实施的魔术方法列表。
您可以在https://hg.python.org/找到CPython的源代码。
答案 1 :(得分:0)
不确定你能做到这一点。这些被称为内置类型,您无法扩展它们。但是,您可以这样做:
class ENumber():
def __init__(self, a=0, b=0):
self.a = a
self.b = b
def __repr__(self):
return "{} + {}e".format(self.a, self.b)
def __add__(self, other):
if isinstance(other, ENumber):
return ENumber(self.a + other.a, self.b + other.b)
行动中:
In [15]: x = ENumber(1, 1)
In [16]: y = ENumber(2, 2)
In [17]: x+y
Out[17]: 3 + 3e
当然,您也必须实施所有其他重要功能。