首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从模块导入导入模块== *?

从模块导入导入模块== *?
EN

Stack Overflow用户
提问于 2010-12-17 06:24:08
回答 3查看 1.5K关注 0票数 1

I had a problem with the Django tutorial so I asked a question here.没有人知道答案,但我最终在Robert的帮助下找到了答案。Python似乎和from datetime import *一样对待from datetime import *

工作代码:

代码语言:javascript
复制
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()

不起作用的代码:(唯一的区别是导入语句和最后一行)。

代码语言:javascript
复制
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(),而不是,这是我询问的错误。

由不工作代码产生的回溯:

代码语言:javascript
复制
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()。我的问题是:为什么datetime在我的名称空间中没有使用from datetime import *

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

更新:突然起作用了。datetime.date.today() date.today()。我的问题仍然是,为什么date.today()要工作?似乎datetime在我的本地名称空间中,而不是我放在那里。为什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-17 06:39:47

正如我们在注释中所讨论的,问题不在于代码,而在于更新源代码的方式。python在sys.modules中缓存模块。您可以使用reload函数重新加载各个模块,但是对于许多更改,最好重新加载整个shell。在许多情况下,这些更改似乎是因为错误消息似乎发生了变化而传播的,这是因为python没有缓存文件的源代码,所以当它引用代码时,它会向您显示最新版本。希望现在,你可以更成功地应用其他答案。

票数 2
EN

Stack Overflow用户

发布于 2010-12-17 06:35:04

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

代码语言:javascript
复制
return (self.pub_date() == datetime.date.today())

self.pub_date包含一个datetime.datetime实例。不能这样叫。例如:

代码语言:javascript
复制
>>> 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
>>>

如果您只想比较date,您应该这样称呼它:

代码语言:javascript
复制
return (self.pub_date.date() == datetime.date.today())
票数 4
EN

Stack Overflow用户

发布于 2010-12-17 09:14:12

“我的问题是:为什么datetime在我的名称空间中不使用from datetime import *。”

因为你确实导入了日期时间。然后在您的命名空间中有日期时间。不是类日期时间,而是模块。

Python并不像对待import datetime一样对待from datetime import *。别再问它为什么那么做了,而它却不这么做。

代码语言:javascript
复制
>>> import datetime
>>> date.today()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'date' is not defined
>>> 

还有别的事情发生了。不管是不是Django魔法,我都不知道。我没有Django安装,我现在可以尝试这个。(如果有一种超快的方法来实现这一点,请告诉我。easy_installing Django是不够的。*)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4468256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档