如何使用“常规”(关键字)参数或父项实例初始化继承的对象

库尔特·皮克(Kurt Peek)

我想用模运算来扩展datetimetimedelta类。我还希望能够以TimeDelta两种方式初始化结果类:

  1. 通过传递通常传递给的(关键字)参数timedelta,例如TimeDelta(seconds=5)
  2. 通过传递的实例作为参数timedelta,在这种情况下,TimeDelta“接管”了该实例的属性。

我尝试了以下方法:

import datetime

class TimeDelta(datetime.timedelta):
    """Extends datetime's timedelta class with a modulo operation."""

    def __init__(self, *args, **kwargs):
        timedeltas = [arg for arg in args if isinstance(arg, datetime.timedelta)]
        if timedeltas:
            self = timedeltas[0]
        else:
            super(TimeDelta, self).__init__(*args, **kwargs)

    def __mod__(self, other):
        return self.total_seconds() % other.total_seconds()

但是,如果我尝试以TimeDelta第一种方式创建的实例,则会得到TypeError

In [1]: execfile('interval.py')

In [2]: time_delta = TimeDelta(datetime.timedelta(seconds=5))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-a0e79564603f> in <module>()
----> 1 time_delta = TimeDelta(datetime.timedelta(seconds=5))

TypeError: unsupported type for timedelta days component: datetime.timedelta

似乎该else语句正在立即被调用,这是行不通的,因为timedelta它不希望自身的实例作为其实例化中的参数。是这样吗 如果是这样,为什么不if触发语句?

丹尼尔·罗斯曼

Python根本不适合您__init____new__如您在源代码中所看到的,timedelta类定义,并且在那里发生了错误-这就是为什么您在回溯中看不到代码的原因。

(还要注意,self = timedeltas[0]除了重新绑定本地名称外,它什么也没有做,因此即使遇到了初始化问题,您的代码也无法正常工作。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用状态对象作为参数初始化视图?

来自分类Dev

在初始化时使用attr_accessor设置ruby 2.0关键字参数

来自分类Dev

将未初始化的参数传递给方法时的ref关键字

来自分类Dev

如何初始化继承对象的字段

来自分类Dev

PEP8和使用长关键字参数的对象初始化

来自分类Dev

没有新关键字且使用指针的C ++对象初始化

来自分类Dev

C ++初始化使用“ new”关键字分配的结构的对象成员

来自分类Dev

使用关键字Args在Python中初始化而不在实例之间共享

来自分类Dev

实例化类型时的关键字参数

来自分类Dev

是否等于getApplication()并使用常规的“ new”初始化实例?

来自分类Dev

如何测试使用正确的参数初始化服务对象?

来自分类Dev

DataTables初始化关键字与官方示例不同

来自分类Dev

Python继承和关键字参数

来自分类Dev

您如何在堆上初始化线程?(使用“新”关键字)

来自分类Dev

如何使用模型实例的某些参数初始化表单

来自分类Dev

如何在不使用C#中的new关键字初始化变量的情况下用值填充数组变量?

来自分类Dev

Keras初始化程序错误意外的关键字参数'dtype'

来自分类Dev

C ++在成员初始化列表中使用'this'关键字

来自分类Dev

如何在Swift中使用保留关键字作为类型名称声明和初始化嵌套枚举?

来自分类Dev

如何使可以使用Typescript中的对象或常规参数构造函数初始化的类?

来自分类Dev

除了关键字args外什么都没有初始化python对象

来自分类Dev

Ruby 2.1+关键字参数初始化程序语法

来自分类Dev

如果从嵌套对象的方法中使用,如何使“ this”关键字引用当前实例?

来自分类Dev

如何使用“ this”关键字作为参数?

来自分类Dev

DataTables初始化关键字与官方示例不同

来自分类Dev

使用内部类中的方法而没有使用new关键字进行对象初始化是否会导致C#Winforms中的内存泄漏

来自分类Dev

在python中初始化默认关键字参数列表

来自分类Dev

我可以在动态知道其类型的模板类对象中使用 auto 关键字吗?我不能在没有初始化程序的情况下使用 auto 关键字吗?

来自分类Dev

何时使用关键字参数进行类初始化?

Related 相关文章

  1. 1

    如何使用状态对象作为参数初始化视图?

  2. 2

    在初始化时使用attr_accessor设置ruby 2.0关键字参数

  3. 3

    将未初始化的参数传递给方法时的ref关键字

  4. 4

    如何初始化继承对象的字段

  5. 5

    PEP8和使用长关键字参数的对象初始化

  6. 6

    没有新关键字且使用指针的C ++对象初始化

  7. 7

    C ++初始化使用“ new”关键字分配的结构的对象成员

  8. 8

    使用关键字Args在Python中初始化而不在实例之间共享

  9. 9

    实例化类型时的关键字参数

  10. 10

    是否等于getApplication()并使用常规的“ new”初始化实例?

  11. 11

    如何测试使用正确的参数初始化服务对象?

  12. 12

    DataTables初始化关键字与官方示例不同

  13. 13

    Python继承和关键字参数

  14. 14

    您如何在堆上初始化线程?(使用“新”关键字)

  15. 15

    如何使用模型实例的某些参数初始化表单

  16. 16

    如何在不使用C#中的new关键字初始化变量的情况下用值填充数组变量?

  17. 17

    Keras初始化程序错误意外的关键字参数'dtype'

  18. 18

    C ++在成员初始化列表中使用'this'关键字

  19. 19

    如何在Swift中使用保留关键字作为类型名称声明和初始化嵌套枚举?

  20. 20

    如何使可以使用Typescript中的对象或常规参数构造函数初始化的类?

  21. 21

    除了关键字args外什么都没有初始化python对象

  22. 22

    Ruby 2.1+关键字参数初始化程序语法

  23. 23

    如果从嵌套对象的方法中使用,如何使“ this”关键字引用当前实例?

  24. 24

    如何使用“ this”关键字作为参数?

  25. 25

    DataTables初始化关键字与官方示例不同

  26. 26

    使用内部类中的方法而没有使用new关键字进行对象初始化是否会导致C#Winforms中的内存泄漏

  27. 27

    在python中初始化默认关键字参数列表

  28. 28

    我可以在动态知道其类型的模板类对象中使用 auto 关键字吗?我不能在没有初始化程序的情况下使用 auto 关键字吗?

  29. 29

    何时使用关键字参数进行类初始化?

热门标签

归档