0

我想在模块中导入仅属于特定类型的对象。

例如要导入的模块是:

# foo.py

a = A() # type(a) = A
b = B() # type(b) = B

现在我想Afoo(即a)导入类型的元素。

显然,您可以导入所有foo然后遍历它以检查类型。不过,我认为这并不理想。

也许有什么importlib可以促进这一点?

编辑

(添加有关用例的更多信息。)

基本上,我正在尝试创建类似IPython 魔术的东西,并希望为自定义魔术创建一个工具。

用户将使用装饰器在文件中注册函数,该装饰器将返回特定类型的实例。

然后,用户将在实例化时传递模块的路径。

# user_file.py

# decorator returns object of particular type (e.g. `foo`)
@register
def a():
  ...

def b():
  ...

然后会发生这样的事情:

# importing_file.py

class GetsRegisteredKeys:

  def __init__(self, paths:list):
    for path in paths:
      # import the elements that were registered, i.e. that have `foo` type.

grk = GetsRegisteredKeys(paths=['./user_file.py'])

用户实际上不会调用GetsRegisteredKeys. 他们只是通过其他地方的路径。

欢迎完全避免这种导入的替代设计。

4

1 回答 1

-1

如果你想这样做,只需将它放入一个函数本身并像这样调用它(我认为这是你想要做的,如果不是,请纠正我)

def A():
    return(a)

def B():
    return(b)

然后在你的其他 python 文件中做

import foo
a = foo.A()
b = foo.B()

foo 显然是它实际名称的占位符。

于 2018-09-26T19:04:12.613 回答