所以我有一个如下所示的课程:
class TestClass():
from somewhere import *
def test_function(self):
pass
当然,我收到的语法警告只有在模块级别允许导入*。我所看到的所有帖子都是为什么这是一个坏主意,并没有提供一种更好地处理这个问题的方法。我们正在考虑迁移到Python 3,并且需要在移动之前将其作为我们的障碍之一。
那么处理这个问题的更好方法是什么?将导入语句放入__init__.py
是否可以处理此问题?如果是这样,那会是什么样的?
答案 0 :(得分:3)
更好的方法是import something
,然后使用something.function_you_want_to_call
而不是function_you_want_to_call
答案 1 :(得分:3)
如果您需要将somewhere
中的所有元素添加为类的元素,则可以使用循环以及getattr()
和setattr()
的组合:
import somewhere
class TestClass():
def test_function(self):
pass
for name in getattr(somewhere, '__all__',
(n for n in dir(somewhere) if not n.startswith('_'))):
setattr(TestClass, name, getattr(somewhere, name))
这将somewhere
添加TestClass
与from somewhere import *
语句完全相同的名称;要么__all__
序列中列出的所有名称,如果设置,否则所有名称都不以下划线开头。
您应该在somewhere
中创建一个基类,而不是导入单个属性(函数等),而不是:
class BaseSomewhere:
somewhere_thing1 = 'something'
def somewhere_thing2(self):
# do something
然后导入 :
import somewhere
class TestClass(somewhere.BaseSomewhere):
def test_function(self):
pass