Skip to main content
 首页 » 编程设计

python之从模块导入*导入模块==

2025年05月04日13leader

I had a problem with the Django tutorial so I asked a question here.没有人知道答案,但我最终在 Robert 的帮助下找到了答案。 . Python 似乎将 import datetime 视为与 from datetime import * 相同。

工作代码:

import datetime 
from django.db import models 
 
class Poll(models.Model): 
    question = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 
    def __unicode__(self): 
        return self.question 
 
    def was_published_today(self): 
        return self.pub_date.date() == date.today() 

无效代码:(唯一的区别是导入语句和最后一行。)

from django.db import models 
import datetime 
 
class Poll(models.Model): 
    question = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 
    def __unicode__(self): 
        return self.question 
 
    def was_published_today(self): 
        return (self.pub_date() == datetime.date.today()) 

编辑:我想我还不够清楚。代码产生与最后一行完全相同的回溯 return (self.pub_date.date() == datetime.date.today()) 我最初忘记添加.date() 不是我要问的错误。

无效代码产生的回溯:

Traceback (most recent call last): 
  File "<console>", line 1, in <module> 
  File "/myDir/mySite/polls/models.py", line 11, in was_published_today 
    return (self.pub_date() == datetime.date.today()) 
TypeError: 'datetime.datetime' object is not callable 

它到底为什么要这样做?

我的问题不是关于忘记.date()。我的问题是:为什么我的命名空间中没有使用 from datetime import * 的 datetime。

注意:第一个问题问的是什么它在做什么。这个问题问的是为什么。

更新:突然间它起作用了。使用 datetime.date.today() AND date.today()。但我的问题仍然存在,为什么 date.today() 有效?似乎日期时间在我的本地 namespace 中,而我没有放在那里。为什么?

请您参考如下方法:

后一个代码段中的问题在于您的这部分代码:

return (self.pub_date() == datetime.date.today()) 

self.pub_date 包含一个 datetime.datetime 实例。不能那样调用。例如:

>>> import datetime 
>>> d = datetime.datetime.now() 
>>> d() 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
TypeError: 'datetime.datetime' object is not callable 
>>> 

如果你只想比较日期,你应该这样调用它:

return (self.pub_date.date() == datetime.date.today())