有没有办法在运算符重载中使用变量。 例如
a += 1
而不是a = a + 1
在
a = max(a, some_other_variable)
max()函数只是一个例子。
注意: 我的意图是尽可能不再使用变量'a'。这两个例子是不同的,彼此没有关系。 例如
a = some_function(a, b)
这里,some_function()返回的值再次分配回变量'a'。 除非变量'a'是一个类变量,否则我无法访问函数some_function()中的变量,虽然如果有办法让我只能使用它一次?
答案 0 :(得分:2)
您无法直接在Python代码中补充Python的运算符和语句集。但是,您可以编写一个使用Python language services编写Pythonesque DSL的包装器,其中包含您想要的运算符。
答案 1 :(得分:2)
我觉得你想要这些东西......
>>> class Foo(object):
... def __iadd__(self, other):
... return max(self.num, other)
... def __init__(self, num):
... self.num = num
...
>>> a = Foo(5)
>>> a += 4
>>> print a
5
>>> a = Foo(4)
>>> a += 6
>>> a
6
但请注意,我会认为__iadd__
的使用非常不礼貌。如果类型是可变的,那么__iadd__
返回self
以外的其他内容通常是不重要的。
答案 2 :(得分:0)
您可以为第二部分创建类似于部分的对象,而不是像其他答案一样在a
中重载运算符。 (我使用左移操作符“酷”)
class partial(functools.partial):
def __rlshift__(self, val):
return self(val)
并使用如下:
>>> a = 10
>>> a <<= partial(max, 20)
>>> a
20
因此,您无需乱用变量类型来执行操作。此外,您不需要为每个函数声明一个新类。
PS:请注意实际执行是max(20, a)
。