我有一个需要访问urllib2的类,对我来说简单的例子是:
class foo(object):
myStringHTML = urllib2.urlopen("http://www.google.com").read()
我应该如何构建我的代码以包含urllib2?一般来说,我想将foo存储在一个包含许多其他类的实用程序模块中,并且能够从模块中自行导入foo:
from utilpackage import foo
将导入放入类中是否正确?这对我来说很奇怪,但它确实有效......
class import_u2_in_foo(object):
import urllib2
myStringHtml = urllib2.urlopen("http://www.google.com").read()
或者我应该将foo移到另一个包中,所以我总是使用
import foo
# then foo.py contains
import urllib2
class foo(object):
myStringHtml = urllib2.urlopen("http://www.google.com").read()
我应该如何构建我的代码,使其成为最pythonic :)?
答案 0 :(得分:4)
您应该在utilpackage
模块中导入它,但只从中导出类foo
:
import urllib2
__all__ = ["foo"]
class foo(object):
myStringHtml = urllib2.urlopen("http://www.google.com").read()
然后你可以做
from utilpackage import foo
但不是
from utilpackage import urllib2
在我看来,这是进口进口的最佳做法。
答案 1 :(得分:2)
我的一般经验法则是,如果文件中的许多内容使用了导入,我会把它放在最顶层。如果它仅由一个单一功能或一个单一范围使用,我会将它放在它所使用的位置,比如在类或函数中。
然而,这不是一个严格的规则,我不会花很多时间考虑通常进口的最佳位置。大多数情况下,我把它们放在最顶层。
我喜欢将进口靠近我使用它的两个最大原因是:
如果函数导入了它需要的东西,那么我可以轻松地将该代码剪切并粘贴到另一个文件中,比如用于测试目的,或者它是像我的“catch和syslog”这样的样板代码。代码“code。
如果不经常使用某个功能,或者需要一个通常不会为不经常使用的部件安装的模块,我不必在不使用它时导入它或者要求用户安装一个模块
答案 2 :(得分:0)
class
和import
都是普通的Python指令,没有魔法附加(好吧,有些事情发生在幕后,但它们只是简单的Python指令)。
Python从上到下遍历你的源代码,按照它的方式执行每条指令 - 无论是class
指令为类创建新对象,还是import
指令导入新模块进入当前范围。
此外,因为import
指令和其他指令一样好,所以你可以把它放在class
里面 - 你可以像想象目录里面的.py文件一样考虑类 - 在后一种情况下,您可能习惯于import
可以直接放在.py文件的主范围内。
写下所有这些,我不确定你想通过将它添加到你的课程中来实现:
myStringHtml = urllib2.urlopen("http://www.google.com").read()
- 在创建类时解析此指令,然后该类的所有对象共享相同的myStringHtml值。
关于放置导入urllib2的最佳位置的问题,我也不太明白这个问题,但对我来说这样做似乎最自然:
import foo
# then foo.py contains
import urllib2
class foo(object):
myStringHtml = urllib2.urlopen("http://www.google.com").read()