我知道我可以通过以下方式在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个操作数实现运算符重载的最佳解决方案是什么。
答案 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
函数