Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.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静态方法中的AttributeError_Python_Python 3.x_Pandas_Datetime_Python 3.6 - Fatal编程技术网

Python静态方法中的AttributeError

Python静态方法中的AttributeError,python,python-3.x,pandas,datetime,python-3.6,Python,Python 3.x,Pandas,Datetime,Python 3.6,我试图在Python 3.6中创建一个仅使用静态方法的类USTradingCalendar 问题:但是,当我尝试调用静态方法get\u trading\u close\u holidays()时,我遇到了一个错误 AttributeError: 'datetime.datetime' object has no attribute 'rules' 出了什么问题?感谢您的帮助 import datetime as dt from helpers import str2date from pan

我试图在Python 3.6中创建一个仅使用静态方法的类
USTradingCalendar

问题:但是,当我尝试调用静态方法
get\u trading\u close\u 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'
回溯(最近一次呼叫最后一次):
文件“tradingCalendar.py”,第37行,在
打印(USTradingCalendar.get_trading_close_holidays(2016))
文件“tradingCalendar.py”,第32行,在get\u trading\u close\u holidays中
返回cls.假日(dt.datetime(第1年,第12年,第31年),dt.datetime(第12年,第31年))
文件“C:\Users\y\Anaconda2\envs\test\lib\site packages\pandas\tseries\holiday.py”,第376行,在holidays中
如果self.rules为“无”:
AttributeError:'datetime.datetime'对象没有属性'rules'
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))

请把整封信寄出去traceback@0TTT0更新了OPtraceback@gommb是的,很好用。这是因为
USTradingCalendar
有点像
holidays(self,
)中的
self
?在这种情况下是正确的,因为您是静态调用
holidays()
。如果调用
holidays()
USTradingCalendar
的实例中,您不必为
self
输入任何内容。