sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-11-28 17:36:04 28 4
mua khóa gpt4 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 đây .

1 Câu trả lời

我确定我在这里遗漏了一些东西,但是B2 没有理由Gọi__neg__. thời giandelta 基类肯定不会使用它。

B1().__abs__() sử dụng -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);
khác
result = delta_positive(self);

trả về kết quả;
}

哪里delta_negativeĐúng __neg__ 钩子(Hook)的原生实现;这里的代码从不考虑子类。

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

28 4 0
Bài viết được đề xuất: python跨平台测试: mocking os.名称
Bài viết được đề xuất: iphone - 在 iPhone 上安装自定义企业应用程序时配置文件错误
Bài viết được đề xuất: javascript - Angular
Bài viết được đề xuất: javascript - knockout 目标
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com