使用 class 实例加载本地 python 模块的聪明方法?
Smart way to load a local python module with a class instance?
用 python class 实例加载本地 python 文件的聪明方法是什么,这样 python 文件中定义的所有变量都会添加到class的属性?
文件 vars.py
包含:
x = 2
y = 'fish'
for i in range(4):
x = x * 3
然后以两种方式将 x
和 y
加载到 class 中:
使用__import__()
注意:这会将模块中的所有全局变量填充到 class 中。很多垃圾。此外,导入的名称必须是一个包,而不仅仅是一个文件。
class DangerZone:
def load_attrs(self, fn):
_vars = __import__(fn)
for attr_name, attr_val in _vars.items():
self.__dict__[attr_name] = attr_val
使用exec()
好的,这很危险(从外部使用 exec()
到 运行 任意代码),但这里是。
class DangerZone:
def load_attrs(self, fn):
_globals = {}
_locals = {}
exec(open(fn).read(), _globals, _locals)
for attr_name, attr_val in _locals.items():
self.__dict__[attr_name] = attr_val
结果:
dz = DangerZone()
dz.load_attrs('vars.py')
print(dz.x, dz.y)
打印:
162 fish
用 python class 实例加载本地 python 文件的聪明方法是什么,这样 python 文件中定义的所有变量都会添加到class的属性?
文件 vars.py
包含:
x = 2
y = 'fish'
for i in range(4):
x = x * 3
然后以两种方式将 x
和 y
加载到 class 中:
使用__import__()
注意:这会将模块中的所有全局变量填充到 class 中。很多垃圾。此外,导入的名称必须是一个包,而不仅仅是一个文件。
class DangerZone:
def load_attrs(self, fn):
_vars = __import__(fn)
for attr_name, attr_val in _vars.items():
self.__dict__[attr_name] = attr_val
使用exec()
好的,这很危险(从外部使用 exec()
到 运行 任意代码),但这里是。
class DangerZone:
def load_attrs(self, fn):
_globals = {}
_locals = {}
exec(open(fn).read(), _globals, _locals)
for attr_name, attr_val in _locals.items():
self.__dict__[attr_name] = attr_val
结果:
dz = DangerZone()
dz.load_attrs('vars.py')
print(dz.x, dz.y)
打印:
162 fish