python - python中的参数模块?从对象导入函数

标签 python import

我有一个模块,我想对其进行参数化,或者更确切地说,我想从一个对象中导入函数。

也就是说,在我从它导入东西之前,我希望能够给它一些参数来改变它的行为。

一种方法是使我的模块成为一个对象,然后只使用这些函数。目前我这样做:

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/

相关文章:

swift - 在文件上导入框架以在 swift 中用于所有其他文件

Python - 矩阵外积

Python Sklearn : Understanding of d-tree Output for Categorical Variable

python - Python 中的 `in` 运算符是否可以用于检查序列中的成员资格?

javascript - package.json 中的 `main` 和 `module` 与 `exports` 有什么区别?

javascript - 未能 "dynamically"导入 date-fns/locale 库 - TypeScript 给出尝试导入错误

python - 将 pdf 转换为图像时出现类型错误 : TypeError ("object of type ' NoneType' has no len()", )

python - 动态添加图例到 matplotlib 图

Postgresql - csv 导入的输入语法无效

android - FileNotFoundException - 读取 csv 文件