我有一个模块,我想对其进行参数化,或者更确切地说,我想从一个对象中导入函数。
也就是说,在我从它导入东西之前,我希望能够给它一些参数来改变它的行为。
一种方法是使我的模块成为一个对象,然后只使用这些函数。目前我这样做:
class MyModule(object):
def __init__(self, previous_sayings):
self.sayings = previous_sayings
__all__ = ['sayhi']
def sayhi(self):
self.sayings.append("hi!")
mod = MyModule(["oh no!"])
sayhi = mod.sayhi
sayhi()
sayhi()
print mod.sayings
这应该打印出 ["oh no!", "hi!", "hi!"]
。
但是,您拥有的函数越多,效果就越差。
我希望能够做这样的事情:
mod = MyModule(["oh no!"])
from mod import *
sayhi()
sayhi()
print mod.sayings
这有可能吗?我可以从基础模块继承吗?如果我添加一个约束条件,它应该对用户来说是显而易见的,那会怎么样?
最佳答案
关于模块有几点需要注意:
它们是单例,这意味着无论您将其导入多少地方,您都只会拥有其中一个
你不能传递参数
from <module> import *
这是危险的,不是一个好习惯,应该只与以这种方式设计的模块一起使用模块中定义的所有函数、类等都将始终将该模块视为它们的全局命名空间。
您可以获得与您想要的类似的东西:
8<--mod.py------------------------------------------------------
sayings = []
def sayhi():
sayings.append("Hi!")
8<--------------------------------------------------------------
import mod
mod.sayings = ['oh no!'] # or mod.sayings.append('oh no')
from mod import sayhi
sayhi()
sayhi()
print mod.sayings
关于python - python中的参数模块?从对象导入函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14719554/