如何在Python中更改一组导入的名称?

时间:2018-03-08 11:28:10

标签: python python-3.x import python-import

我想从名称更改的模块中导入所有方法。

例如,而不是

from module import repetitive_methodA as methodA, \
    repetitive_Class1 as Class1, \
    repetitive_instance4 as instance4

我更喜欢

的内容
from module import * as *-without-"repetitive_"

这是对此clumsy unanswered question的改述,我还未能找到解决方案或类似问题。

2 个答案:

答案 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