Python 正在重写添加,尝试super()时未捕获异常__ 我试图把大熊猫的时间增量< /代码>子类,因此当它被整数/浮点相加时,我们认为它是“代码>时间增量< /代码>秒。
我尝试了以下方法:Python 正在重写添加,尝试super()时未捕获异常__ 我试图把大熊猫的时间增量< /代码>子类,因此当它被整数/浮点相加时,我们认为它是“代码>时间增量< /代码>秒。,python,inheritance,add,timedelta,Python,Inheritance,Add,Timedelta,我尝试了以下方法: class Timedelta(pd.Timedelta): def __add__(self, other): print("OVERRIDEN ADD") try: print("SUPER ADD") return super().__add__(other) except: print("NEW ADD") retur
class Timedelta(pd.Timedelta):
def __add__(self, other):
print("OVERRIDEN ADD")
try:
print("SUPER ADD")
return super().__add__(other)
except:
print("NEW ADD")
return super().__add__(Timedelta(str(other)+"s"))
但由于某些原因,我无法将其转到“新添加”
实现:
>>> a = Timedelta2('10s')
>>> a+1
OVERRIDEN ADD
Traceback (most recent call last):
File "C:\Python36\lib\site-packages\IPython\core\interactiveshell.py", line 2910, in run_code
SUPER ADD
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-51-98b939904c8e>", line 1, in <module>
a+1
TypeError: unsupported operand type(s) for +: 'Timedelta2' and 'int'
>a=Timedelta2('10s')
>>>a+1
覆盖添加
回溯(最近一次呼叫最后一次):
文件“C:\Python36\lib\site packages\IPython\core\interactiveshell.py”,第2910行,运行代码
超级添加
exec(代码对象、self.user\u全局、self.user\n)
文件“”,第1行,在
a+1
TypeError:不支持+:“Timedelta2”和“int”的操作数类型
我本来希望捕获这个TypeError
异常,但由于某些原因,它没有被捕获,因此我想寻求一些帮助,以了解这里可能发生的情况
谢谢 super()。\uuuu add\uuuuu(其他)
不会引发异常!它返回NotImplemented
。这就是你发出的信号,你的操作符重载不理解它得到的论点。TypeError
来自操作员机器,一旦双方都表示无法执行操作
不要试图捕获一个无论如何都不会从那里产生的异常,而是检查super()。\uuuu add\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu!它返回NotImplemented
。这就是你发出的信号,你的操作符重载不理解它得到的论点。TypeError
来自操作员机器,一旦双方都表示无法执行操作
与其试图捕获一个无论如何都不会出现的异常,不如检查super()。\uuuu add\uuuuu(其他)
是否返回NotImplemented
您还没有真正理解\uuu add\uuuuu
方法!尝试下面的方法来达到你的期望<代码>尝试。。。expect
无效,因此如果。。否则
import pandas as pd
class MyTimedelta(pd.Timedelta):
def __add__(self, other):
print("OVERRIDEN ADD")
if isinstance(other, int):
return pd.Timedelta("{}s".format(int(self.seconds)+ other))
else:
super(MyTimedelta, self).__add__(other)
然后您可以执行如下操作:
In [22]: s=MyTimedelta('2s')
In [23]: s+3
OVERRIDEN ADD
Out[23]: Timedelta('0 days 00:00:05')
您不是真正了解
\uuuu添加\uuuu
方法!尝试下面的方法来达到你的期望<代码>尝试。。。expect无效,因此如果。。否则
import pandas as pd
class MyTimedelta(pd.Timedelta):
def __add__(self, other):
print("OVERRIDEN ADD")
if isinstance(other, int):
return pd.Timedelta("{}s".format(int(self.seconds)+ other))
else:
super(MyTimedelta, self).__add__(other)
然后您可以执行如下操作:
In [22]: s=MyTimedelta('2s')
In [23]: s+3
OVERRIDEN ADD
Out[23]: Timedelta('0 days 00:00:05')
你是什么意思?
试试。。。除了
没有效率?它比每次检查值的类型要有效得多。相关问题:你是什么意思。。。除了没有效率?它比每次检查值的类型要有效得多。请尝试。有关问题: