如何导入特定的类并通过导入来执行其中的代码?
假设我有
x.py
:
class classY:
print('Executed class Y!')
class classZ:
print('Executed class Z!')
当我仅从另一个文件导入该模块时,我希望执行语句
print('Executed function Y!')
。
例如,当我执行命令
from x import classY
时,我希望控制台中的输出为:
>>>from x import classY
Executed class Y!
>>>
目前,在相同的条件下执行相同的命令会导致打印两个字符串。
我怎样才能实现这个目标?
您可以使用模块级别
__getattr__
来完成此操作(请参阅PEP-562)。这需要重命名您的类或将它们放置在命名空间或单独的模块中,以确保调用 __getattr__
。
class Namespace:
class A:
...
class B:
...
def __getattr__(name):
cls = getattr(Namespace, name)
if cls is not None:
print(f"Imported class {cls.__name__}")
return cls
raise AttributeError(f"{name} invalid")