Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从日期继承_uiadd_uuu,并返回新类的实例_Python_Oop - Fatal编程技术网

Python 从日期继承_uiadd_uuu,并返回新类的实例

Python 从日期继承_uiadd_uuu,并返回新类的实例,python,oop,Python,Oop,我有一些工作需要在每个月的最后一个星期五以稍微不同的方式进行。因此,我想添加一个方法IsLastFriday to date,如果查看的日期是当月的最后一个星期五,则该方法返回True。因此,我编写了自己的类,该类继承自date,并添加了该逻辑 from datetime import date from datetime import timedelta class my_date(date): def __init__(self, y, m ,d): super(

我有一些工作需要在每个月的最后一个星期五以稍微不同的方式进行。因此,我想添加一个方法IsLastFriday to date,如果查看的日期是当月的最后一个星期五,则该方法返回
True
。因此,我编写了自己的类,该类继承自date,并添加了该逻辑

from datetime import date
from datetime import timedelta

class my_date(date):

    def __init__(self, y, m ,d):
        super(my_date, self).__init__(y, m, d)

    def IsLastFriday(self):
        days = [0 31 28 31 30 31 30 31 31 30 31 30 31]
        month = self.month
        total_days = days[month]
        if total_days - self.day <= 6 and self.isoweekday == 5:
            return True
        else:
            return False

    def __iadd__(self, other):
        n_date = self.__add__(other)
        n_my_date = my_date(n_date.year, n_date.month, n_date.day)
        return n_my_date
我得到一个错误,因为
'super'对象没有属性'\uuuu iadd\uuuu'
,如果我尝试调用
\uuuu add\uuuuu
,我会得到一个date back的实例

我觉得我应该能够以某种方式继承
\uuu iadd\uuu
,因为它可以为日期对象调用

任何帮助,非常感谢

我觉得我应该能够以某种方式继承
\uuu iadd\uuu
,因为它可以为日期对象调用


不是<代码>日期对象没有
\uuuu iadd\uuuu
;当您尝试在它们上使用
+=
时,Python会查找
\uuuIdd\uIdd\uIdd
,发现它不在那里,并使用
\uIdd\uIdd
代替。由于
date
对象是不可变的,因此无法以一种变异的方式实现
\uuuidd\uuuu
,因此您根本不应该实际实现
\uidd\uuuu
;如果您只想添加一些在
日期时间
实例上运行的逻辑,那么应该实现
\uuuu添加

子类化内置类型不是一个好办法。一个简单的函数就可以了:

import datetime

def is_last_friday_of_month(dt):
    """Determine whether `dt` is the last Friday of the month."""
    if dt.weekday() != 4:  # Friday is 4
        return False
    dt_week_after = dt + datetime.timedelta(weeks=1)
    return dt.month != dt_week_after.month
像这样使用它:

now = datetime.datetime.now()
if is_last_friday_of_month(dt):
    print("It's the last Friday of the month.")
now = datetime.datetime.now()
if is_last_friday_of_month(dt):
    print("It's the last Friday of the month.")