gpt4 book ai didi

python - child 调用 parent , parent 调用 child ......或不

转载 作者:行者123 更新时间:2023-11-28 17:36:04 28 4
gpt4 key购买 nike

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

为什么第一个 print 调用使用重写的方法,而第二个不使用?我不明白。第二种情况似乎也在 python 实现中调用了 -self here .

最佳答案

我确定我在这里遗漏了一些东西,但是B2 没有理由调用__neg__timedelta 基类肯定不会使用它。

B1().__abs__() 使用 -self,这会触发 self.__neg__() 调用,但是 B2 没有应用这样的运算符。

请注意 datetime.py Python implementation这里不涉及;该代码适用于由于某种原因无法运行 C implementation of the same 的系统:

static PyObject *
delta_abs(PyDateTime_Delta *self)
{
PyObject *result;

assert(GET_TD_MICROSECONDS(self) >= 0);
assert(GET_TD_SECONDS(self) >= 0);

if (GET_TD_DAYS(self) < 0)
result = delta_negative(self);
else
result = delta_positive(self);

return result;
}

哪里delta_negative__neg__ 钩子(Hook)的原生实现;这里的代码从不考虑子类。

关于python - child 调用 parent , parent 调用 child ......或不,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30463773/

28 4 0
文章推荐: python跨平台测试: mocking os.名称
文章推荐: iphone - 在 iPhone 上安装自定义企业应用程序时配置文件错误
文章推荐: javascript - Angular