【问题标题】:AttributeError in Python Static MethodPython静态方法中的AttributeError
【发布时间】:2017-10-28 22:56:39
【问题描述】:

我正在尝试在 Python 3.6 中创建一个只有静态方法的类 USTradingCalendar

问题:但是当我尝试调用静态方法get_trading_close_holidays()时,我得到一个错误

AttributeError: 'datetime.datetime' object has no attribute 'rules'

出了什么问题?任何帮助表示赞赏!

import datetime as dt
from helpers import str2date

from pandas.tseries.holiday import AbstractHolidayCalendar, Holiday, nearest_workday, \
    USMartinLutherKingJr, USPresidentsDay, GoodFriday, USMemorialDay, \
    USLaborDay, USThanksgivingDay


class USTradingCalendar(AbstractHolidayCalendar):
    rules = [
        Holiday('NewYearsDay', month=1, day=1, observance=nearest_workday),
        USMartinLutherKingJr,
        USPresidentsDay,
        GoodFriday,
        USMemorialDay,
        Holiday('USIndependenceDay', month=7, day=4, observance=nearest_workday),
        USLaborDay,
        USThanksgivingDay,
        Holiday('Christmas', month=12, day=25, observance=nearest_workday)
    ]


    @classmethod
    def get_trading_close_holidays(cls, year):
        return cls.holidays(dt.datetime(year-1, 12, 31), dt.datetime(year, 12, 31))



if __name__ == '__main__':
    print(USTradingCalendar.get_trading_close_holidays(2016))

追溯:

Traceback (most recent call last):
  File "tradingCalendar.py", line 37, in <module>
    print(USTradingCalendar.get_trading_close_holidays(2016))
  File "tradingCalendar.py", line 32, in get_trading_close_holidays
    return cls.holidays(dt.datetime(year-1, 12, 31), dt.datetime(year, 12, 31))
  File "C:\Users\y\Anaconda2\envs\test\lib\site-packages\pandas\tseries\holiday.py", line 376, in holidays
    if self.rules is None:
AttributeError: 'datetime.datetime' object has no attribute 'rules'

【问题讨论】:

  • 请发布整个回溯
  • @0TTT0 使用回溯更新了 OP
  • @gommb 是的,效果很好。这是因为USTradingCalendar 有点像holidays(self,... 中的self
  • 在这种情况下,是的,这是正确的,因为您正在静态调用 holidays()。如果您从USTradingCalendar 的实例调用holidays(),那么您不必为self 输入任何内容。

标签: python python-3.x pandas datetime python-3.6


【解决方案1】:

holidays() 需要AbstractHolidayCalendar 类型的参数,因此将其更改为:

@classmethod
def get_trading_close_holidays(cls, year):
    return cls.holidays(USTradingCalendar(), dt.datetime(year-1, 12, 31), dt.datetime(year, 12, 31))

【讨论】:

    猜你喜欢
    • 2010-10-18
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2010-10-27
    相关资源
    最近更新 更多