gpt4 book ai didi

python - 不能继承timedelta

转载 作者:行者123 更新时间:2023-12-01 02:14:27 25 4
gpt4 key购买 nike

我对 timedelta 感到恼火。没有__format__方法。所以我想继承timedelta (built-in/extension type 'datetime.timedelta' 没有猴子补丁选项)

所以我厌倦了继承(my_dict仅供引用;这个有效!)。

from datetime import timedelta

class my_dict(dict):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

class my_timedelta(timedelta):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

print(my_dict.__mro__)
# (<class '__main__.my_dict'>, <class 'dict'>, <class 'object'>)

print(my_timedelta.__mro__)
# (<class '__main__.my_timedelta'>,
# <class 'datetime.timedelta'>, <class 'object'>)

d0 = my_dict(); d1 = my_dict(a=3)
print(d0, d1)
# -> {} {'a': 3}

# no arguments: this works!
t0 = my_timedelta()
print(t0) # -> 0:00:00

# one argument: TypeError
# t1 = my_timedelta(5) # -> TypeError: object.__init__() takes no parameters
# print(t1)

# a key-word argument: TypeError
# t2 = my_timedelta(seconds=5) # -> TypeError: object.__init__()
# takes no parameters
# print(t2)

两者的方法解析顺序看起来很相似;但似乎__init__timedelta案例正在跳过 timedelta.__init__并将目录跳转到 object.__init__ .

我做错了什么吗?我如何继承 timedelta ?这里出了什么问题?

最佳答案

根据How to initialize an inherited object with either the 'usual' (keyword) arguments or an instance of the parent ,您必须重写 new() 方法。像这样的东西:

class my_timedelta(timedelta):
def __new__(cls, *args, **kwargs):
# whatever here
return super().__new__(cls, *args, **kwargs)

关于python - 不能继承timedelta,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48461081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com