我想从名称更改的模块中导入所有方法。
例如,而不是
from module import repetitive_methodA as methodA, \
repetitive_Class1 as Class1, \
repetitive_instance4 as instance4
我更喜欢
的内容from module import * as *-without-"repetitive_"
这是对此clumsy unanswered question的改述,我还未能找到解决方案或类似问题。
答案 0 :(得分:1)
你可以这样做:
import module
import inspect
for (k,v) in inspect.getmembers(module):
if k.startswith('repetitive_'):
globals()[k.partition("_")[2]] = v
编辑以回应评论“这个答案将如何使用?”
假设module
如下所示:
# module
def repetitive_A():
print ("This is repetitive_A")
def repetitive_B():
print ("This is repetitive_B")
然后在运行重命名循环后,此代码:
A()
B()
生成此输出:
This is repetitive_A
This is repetitive_B
答案 1 :(得分:0)
我会做什么,创造一个解决方法...
包括您在当前目录中有一个名为some_file.py
的文件,该文件由...
# some_file.py
def rep_a():
return 1
def rep_b():
return 2
def rep_c():
return 3
导入内容时,可以创建一个调用方法的对象。这些方法是文件的类,变量和函数。
为了得到你想要的东西,我认为添加一个新对象是一个好主意,其中包含你想要重命名的原始函数。函数redirect_function()
将一个对象作为第一个参数,并将迭代通过该对象的方法(简而言之,这是您的文件的函数):然后,它将创建另一个对象,它将包含您想要首先重命名的函数的指针。
tl; dr:此函数将创建另一个包含原始函数的对象,但该函数的原始名称将也保留。
见下面的例子。 :)
def redirect_function(file_import, suffixe = 'rep_'):
# Lists your functions and method of your file import.
objects = dir(file_import)
for index in range(len(objects)):
# If it begins with the suffixe, create another object that contains our original function.
if objects[index][0:len(suffixe)] == suffixe:
func = eval("file_import.{}".format(objects[index]))
setattr(file_import, objects[index][len(suffixe):], func)
if __name__ == '__main__':
import some_file
redirect_function(some_file)
print some_file.rep_a(), some_file.rep_b(), some_file.rep_c()
print some_file.a(), some_file.b(), some_file.c()
这输出......
1 2 3
1 2 3