Python 子项调用父项,父项调用子项。。。还是不
为什么第一个print调用使用重写的方法,而第二个不使用?我不明白。第二种情况似乎也在python实现中调用Python 子项调用父项,父项调用子项。。。还是不,python,inheritance,operator-overloading,python-datetime,Python,Inheritance,Operator Overloading,Python Datetime,为什么第一个print调用使用重写的方法,而第二个不使用?我不明白。第二种情况似乎也在python实现中调用-self 我确信我在这里遗漏了一些东西,但是没有理由B2调用\uuuuu neg\uuuu。timedelta基类肯定不会使用它 B1()。\uuuu abs\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 请注意
-self
我确信我在这里遗漏了一些东西,但是没有理由B2
调用\uuuuu neg\uuuu
。timedelta
基类肯定不会使用它
B1()。\uuuu abs\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
请注意,此处不涉及此问题;该代码适用于因某种原因无法运行以下命令的系统:
静态PyObject*
delta_abs(PyDateTime_delta*self)
{
PyObject*结果;
断言(GET_TD_微秒(self)>=0);
断言(GET_TD_SECONDS(self)>=0);
如果(获得天数(自我)<0)
结果=delta_阴性(自身);
其他的
结果=delta_阳性(自身);
返回结果;
}
其中是钩子的本机实现;代码在这里从不考虑子类。因为-self
使用\uuuu neg\uuu
?为什么B2
?@MartijnPieters:这是传递给B2
的-1
的意图,我想:@minitech:不要将Python参考实现与C实现混淆。:-)是的,我认为OP混淆了\uuuuu neg\uuuuu
和\uuuu sub\uuuu
)我认为假设是时间增量
需要\uuuu neg\uuuu
将负输入转换为正输入。但它似乎否定了组成部分。我能骗我的系统使用python实现而不是C实现吗?@wim:如果没有最后几行代码,就需要重新运行模块。将datetime.py
文件加载到字符串中,从try:import\u datetime
开始删除行,使用创建替换模块对象并将其填充到sys.modules['datetime']
中。超级黑客,你说得对。我尝试了你的“破解”,看到了我最初期望的输出(B1的neg
;B2的neg
)
from datetime import timedelta
class A:
def __abs__(self):
return -self
class B1(A):
def __neg__(self):
return 'neg from B1'
class B2(timedelta):
def __neg__(self):
return 'neg from B2'
print(abs(B1())) # neg from B1
print(abs(B2(-1))) # 1 day, 0:00:00