有没有办法只从Python模块导入一个特定的、预定义的类列表?例如,假设模块a.py
和b.py
位于同一目录中,代码如下:
#a.py
class Foo(object):
'''definition of class Foo goes here'''
class Bar(object):
'''definition of class Bar goes here'''
aTypes = [Foo, Bar]
\单位
#b.py
from a import aTypes
print Foo
当然,运行b.py
会导致print Foo
行引发NameError
。我真的不认为这会起作用(在b.py
中的import语句给了我一个a.Foo
类型而不是Foo
类型),但是我不能理解正确的语法。除了from a import aTypes
之外,还有其他方法可以提供所需的行为吗?你知道吗
假设您确实需要这样做(处理类型列表),并且不能使用像
__all__
这样只工作一次的技巧(每个模块一个这样的特殊列表),那么:像这样使用:
我很难想象你为什么需要这个,但那不是我的问题;-)
注意
__name__
的使用意味着这通常不适用于符号,只适用于类、模块、函数和我忘记的任何其他东西(或者适用于您自己设计的具有__name__
的对象)。它也不适用于在模块中使用别名的内容,例如在模块中写入Baz = Bar
,然后在列表中使用Baz
。如果列表是['Foo', 'Bar']
而不是[Foo, Bar]
,并且您还将源模块传递到gettypes
,那么您可以避免这些限制。你知道吗您可以在
a.py
的模块级别定义__all__
:这将允许您按以下方式导入它:
当然,这种行为并不总是被鼓励的,人们更倾向于另一种选择:
您可以直接导入名称:
或者,您可以在} :
a.py
中定义^{然后在
b.py
中执行通配符导入:不过,对于两个名称,使用第一个解决方案会更容易。你知道吗
相关问题 更多 >
编程相关推荐