Python运算符重载多个操作数

时间:2016-09-15 14:05:25

标签: python python-2.7 python-3.x python-2.x

我知道我可以通过以下方式在python中进行简单的运算符重载。

假设重载'+'运算符。

CREATE TABLE employee(
  emp_id bigint,
  name string, 
  address string,
  salary double, 
  period string,
  position string
  )
PARTITIONED BY ( 
  dept_id bigint)
 STORED AS PARQUET


CREATE TABLE employee_salary_period(
  emp_id
  name string, 
  salary string, 
  period string,
  salary_period_map Map<String,String>,
  )
PARTITIONED BY ( 
  dept_id bigint)
 STORED AS PARQUET

但是当我尝试执行以下操作时失败,

class A(object):
  def __init__(self,value):
    self.value = value

  def __add__(self,other):
    return self.value + other.value

a1 = A(10)
a2 = A(20)
print a1 + a2

由于a1 = A(10) a2 = A(20) a3 = A(30) print a1 + a2 + a3 只接受2个参数。使用n个操作数实现运算符重载的最佳解决方案是什么。

2 个答案:

答案 0 :(得分:2)

这是失败的,因为function checkItemsValidity() { var len = $scope.artists[0].materials.items.length; for (var i = 0; i < $scope.artists.length; i++) { if ($scope.artists[i].materials.items.length != len) { return false; } } return true; } 会返回a1 + a2个实例并调用其int,但不支持添加自定义类__add__;您可以在A中返回A个实例,以消除此特定操作的异常:

__add__

现在将它们加在一起的行为符合预期的方式:

class A(object):
  def __init__(self,value):
    self.value = value

  def __add__(self,other):
    return type(self)(self.value + other.value)

这类课程遇到与其他操作相同的问题;你需要实现其他的dunders来返回你的类的实例,否则你将与其他操作碰撞到相同的结果。

如果你希望在>>> a1 = A(10) >>> a2 = A(20) >>> a3 = A(30) >>> print(a1 + a2 + a3) <__main__.A object at 0x7f2acd7d25c0> >>> print((a1 + a2 + a3).value) 60 这些对象时显示一个好的结果,你还应该实现print以在调用时返回值:

__str__

现在打印具有您需要的效果:

class A(object):
    def __init__(self,value):
        self.value = value

    def __add__(self,other):
        return A(self.value + other.value)

    def __str__(self):
        return "{}".format(self.value)

答案 1 :(得分:0)

问题在于

$scope.tabs = [ { heading:'DIT', route:'app.dit',active:true}, { heading:'ST', route:'app.st',active:false}, { heading:'UAT', route:'app.uat',active:false}, ]; $scope.go = function(route){ $state.go(route); }; $scope.active = function(route){ return $state.is(route); }; $scope.$on("$stateChangeSuccess", function() { $scope.tabs.forEach(function(tab) { tab.active = $scope.active(tab.route); }); }); a1 + a2 + a3

30是一个int,并且int不知道如何总结为A

您应该在30 + a3函数

中返回A的实例