这是我正在使用的结构:
directory/
script.py
subdir/
__init__.py
myclass01.py
myclass02.py
我想要做的就是在script.py中定义的类进口myclass01.py
和myclass02.py
。如果我做:
from subdir.myclass01 import *
对于中定义的类,它工作正常myclass01.py
。但是使用此解决方案时,如果在不同文件中定义了许多类,subdir
并且我想导入所有这些类,则必须为每个文件键入一行。必须有一个捷径。我试过了:
from subdir.* import *
但这没有解决。
编辑 :这是文件的内容:
这是__init__.py
(__all__
按照Apalala的建议使用):
__all__ = ['MyClass01','MyClass02']
这是myclass01.py
:
class MyClass01:
def printsomething():
print 'hey'
这是myclass02.py
:
class MyClass02:
def printsomething():
print 'sup'
这是script.py
:
from subdir import *
MyClass01().printsomething()
MyClass02().printsomething()
这是我尝试运行时得到的跟踪script.py
:
File "script.py", line 1, in <module>
from subdir import *
AttributeError: 'module' object has no attribute 'MyClass01'
尽管此处使用的名称与问题的目录结构中显示的名称不同,但是您可以使用我对名为Namespacing和classes的问题的答案。在__init__.py
这里所示本来还允许usepackage.py
脚本已经这样写的(package
映射到subdir
你的问题,并Class1
以myclass01
等):
from package import *
print Class1
print Class2
print Class3
修订(更新):
糟糕,抱歉,我的其他答案中的代码并未完全满足您的要求-
它只会自动导入任何程序包子模块的名称。为了使其也从每个子模块导入命名属性,需要多几行代码。这是软件包__init__.py
文件的修改版本(在Python
3.4.1中也可以使用):
def _import_package_files():
""" Dynamically import all the public attributes of the python modules in this
file's directory (the package directory) and return a list of their names.
"""
import os
exports = []
globals_, locals_ = globals(), locals()
package_path = os.path.dirname(__file__)
package_name = os.path.basename(package_path)
for filename in os.listdir(package_path):
modulename, ext = os.path.splitext(filename)
if modulename[0] != '_' and ext in ('.py', '.pyw'):
subpackage = '{}.{}'.format(package_name, modulename) # pkg relative
module = __import__(subpackage, globals_, locals_, [modulename])
modict = module.__dict__
names = (modict['__all__'] if '__all__' in modict else
[name for name in modict if name[0] != '_']) # all public
exports.extend(names)
globals_.update((name, modict[name]) for name in names)
return exports
if __name__ != '__main__':
__all__ = ['__all__'] + _import_package_files() # '__all__' in __all__
或者,您可以将以上内容放入包目录中单独的.py模块文件中(例如),_import_package_files.py
并从包中使用它,__init__.py
如下所示:
if __name__ != '__main__':
from ._import_package_files import * # defines __all__
__all__.remove('__all__') # prevent export (optional)
无论您以什么名字命名文件,它都应该以_
下划线字符开头,这样它就不会import
递归地尝试自身。
调试和运行时,我在 pycharm 中遇到输入错误。 我的项目结构根是正确的,< code >等等。/HW3/。以便< code>HW3是根目录。 我在HW3中有一个子文件夹,还有一个文件。我在中有另一个名为的文件。 在中,我有以下导入结构, 这会产生一个输入错误, 但是,在完全相同的项目中,在另一个名为 data 的目录(与 util 相同级别)中,我有一个文件 /,它也使用类似的导入语句从 u
问题内容: 我有一个名为“ ClassA”的Python类,另一个应该导入“ A ClassB”的ClassA的Python类。目录结构如下: 我将如何使用,以便ClassB可以使用ClassA? 问题答案: 您确实应该使用软件包。然后将MainDir放置在文件系统中sys.path上的某个点(例如… / site- packages)上,然后可以在ClassB中说: 您只需要在每个目录中放置命名
我在Python 3.3项目中有一个名为/models的目录。 从我的我只是做了一个 在我的: 这在我的应用程序中非常有效。 我有一个依赖于另一个模型的模型,例如在我的我需要导入。py。当我这样做时: 我得到错误。 如何从同一模块/目录中的文件A导入类B?
我有一个这样的文件结构: 在笔记本中的文件我想从和。 我已经找到了这个问题的答案,可以在每个笔记本中使用以下代码行,并每次将这些代码行作为第一个单元格运行: 有没有更好的办法?如果我有很多笔记本中的文件文件夹,我是否必须将这些代码行粘贴到每一行的开头?有更好、更简约或更干净的方法吗?
问题内容: 我坚信这只是一种语法-但是我不知道为什么我的代码: 将无法正常工作-它显然可以进入“ testfilefolder”文件夹,并告诉我该文件在那里,即未找到错误消息“ file2.txt”。因此它可以找到它来告诉我找不到它… 但是,我得到了这段代码: 奖金-这是做我想做的事情的好方法吗(从文件中读取并计算单词的出现频率)?这是我使用Python的第一天(尽管我有很多编程经验。) 我必须说
问题内容: 我有一个存储所有.py文件的目录。 我想从使用类user.py和dir.py在main.py。 如何将这些Python类导入main.py? 此外,如果user.py在子目录中,如何导入类? 问题答案: Python 2 在与文件相同的目录中创建一个名为的空文件。这将向Python表示“可以从此目录导入”。 然后做… 如果文件位于子目录中,则也应如此-将子目录也放入子目录中,然后使用带