date.day()返回TypeError:'int'对象不可调用

Rya*_*ton 3 datetime date typeerror python-2.7

我被卡住了.看来那天被某个地方的某个地方覆盖了.但是哪里?天变成了int?

from datetime import *

start_date = date(1901, 1, 1)
end_date = date(2000, 12, 31)
sundays_on_1st = 0

def daterange(start_date, end_date):
    for n in range(int ((end_date - start_date).days)):
        yield start_date + timedelta(n)

for single_date in daterange(start_date, end_date):

    # type(single_date) => <type 'datetime.date'>
    # type(date.day()) => TypeError: 'getset_descriptor' object is not callable
    # type(single_date.day()) => TypeError: 'int' object is not callable
    # ?_? 

    if single_date.day() == 1 and single_date.weekday() == 6: 
        sundays_on_1st += 1                                     

print sundays_on_1st
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 8

.day不是一种方法,你不需要调用它.只是.weekday()一种方法.

if single_date.day == 1 and single_date.weekday() == 6: 
    sundays_on_1st += 1                                     
Run Code Online (Sandbox Code Playgroud)

这很好用:

>>> for single_date in daterange(start_date, end_date):
...     if single_date.day == 1 and single_date.weekday() == 6:
...         sundays_on_1st += 1
... 
>>> print sundays_on_1st
171
>>> type(single_date.day)
<type 'int'>
Run Code Online (Sandbox Code Playgroud)

从datetime.date文档:

实例属性(只读):

date.year
间MINYEAR和MAXYEAR包容性.

date.month
介于1到12之间.

date.day
在给定年份的给定月份中的1和之间的天数.

它被实现为数据描述符(如a property),使其成为只读,因此TypeError: 'getset_descriptor' object is not callable您看到的错误.