在Python中自动转换为用户定义类型

时间:2016-12-16 11:08:42

标签: python class python-3.4 arithmetic-expressions

我正在构建一个类型(dual numbers)并且无法找到使它们在算术表达式中表现良好的方法,就像Python中的复数一样:

@feed_items = current_user.feed.paginate(page: params[:page])

就我而言:

>>> 2 + 3 + 7j
>>> 5 + 7j

我可以很容易地使它工作,操纵__add__方法,另一种方式:我的类型+内置。我也可以做外部函数添加和传递参数,但显然,很好地与' +'好多了。
提前致谢。 PS哪里可以找到Python模块的源代码(我可以自己查看一个复杂的类)?

2 个答案:

答案 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

当然,您也必须实施所有其他重要功能。