创建我自己的 python 模块 - 问题

Posted

技术标签:

【中文标题】创建我自己的 python 模块 - 问题【英文标题】:Creating my own python module - questions 【发布时间】:2013-06-05 12:14:32 【问题描述】:

我正在创建自己的 python 模块,其中包含一些我想使用的功能。我想知道如何做这些事情:

如何继续使用名为 module.py 的 python 模块,以便在调用“import module.function”时只导入我想要的函数? (所以我不必导入整个模块) 我是否总是必须为我的函数创建一个类,即使我永远不会使用该类的多个对象? (如果没有,如何创建一个包含所有 self 变量的函数,这样它们就不会与整个代码中的全局变量混淆?)(但不使用 def fun(self, var1, var2...) 因为我不想调用 fun("", var1, var2...) 是“安装”我的模块还是像外部文件一样使用它更好?

【问题讨论】:

请澄清您的第二点。 “一个包含所有自变量的函数”等是什么意思? self.var1, self.var2,所以我可以在我的代码中使用任何变量,它不会与函数内部的变量混淆 【参考方案1】:
    如何继续使用名为 module.py 的 python 模块,以便在调用“import module.function”时只导入我想要的函数? (所以我不必导入整个模块)

使用语法

from mymodule import myobject

您可以导入在模块文件顶层声明的任何对象(您也可以通过在__all__ 对象中声明所有“公共”对象来覆盖它以隐藏某些对象)。但正如@BrenBam 所说,无论您使用from mymodule ... 还是import module,解释器仍会从该模块加载所有***对象,但只会公开您选择的对象。

    我是否总是必须为我的函数创建一个类,即使我永远不会使用该类的多个对象? (如果没有,如何创建一个包含所有 self 变量的函数,这样它们就不会与整个代码中的全局变量混淆?)(但不使用 def fun(self, var1, var2...) 因为我不想调用 fun("", var1, var2...)

这是您要问的 OOP 软件设计问题。根据定义,函数具有参数和一个输出,仅此而已,例如:

function foo(arg1, arg2):
    return arg1+arg2

它的用法再简单不过了:

>>> print foo(1,2)
3

方法是绑定到类的函数,(在python中)具有对当前对象(或类)的引用:

class Foo():
    def set_arg1(self, arg1):
        self.arg1 = arg1
    def set_arg2(self, arg2):
        self.arg2 = arg2
    def foo(self):
        return self.arg1+self.arg2

然后您将Foo 类实例化为一个对象,并使其适用于数据:

>>> bar = Foo()
>>> bar.set_arg1(1)
>>> bar.set_arg2(2)
>>> print bar.foo()
3

然后当你制作一个模块时,你根据你需要它们做什么来声明函数和对象。如果您有一组对同一组变量起作用的函数,您将希望将它们封装为类中的“成员”,将函数制作成将作用于这些成员的方法,为类创建行为并公开给你模块的用户的类。然后他们会将您的类实例化为具有自己价值的对象并感到高兴。

如果您的函数正在接受参数,将它们转换为一组结果而不与函数外部的变量交互,那么您将希望保持它们原样:只是普通函数。

所以,总而言之,这是一个软件设计问题,互联网上和图书馆里都有很多关于这些主题的书籍。我很确定你可以找到一个关于“what's thebest OOsoftwaredesignbook?”的问题

    “安装”我的模块还是像使用外部文件一样使用它更好?

在分发代码时使用distutils/setuptools 安装模块总是更好。为了帮助您开发软件,您最好使用zc.buildoutvirtualenv 之类的工具(第一个更强大,但更复杂,通常在您需要开发环境构建系统时很有用,第二个一个非常简单易用,确实有助于让您的环境为开发做好准备)。

您可以在此处找到两者的教程:

http://simononsoftware.com/virtualenv-tutorial/ http://www.buildout.org/docs/tutorial.html

HTH

【讨论】:

【参考方案2】:

您不一定非要在 python 中创建一个类,但使用类可以帮助您将函数和变量包装到一个对象中。

【讨论】:

以上是关于创建我自己的 python 模块 - 问题的主要内容,如果未能解决你的问题,请参考以下文章

创建自己的python模块,并使用pip install安装到python环境

python中怎么import自己写的模块

模块之自定义模块

导入我自己的 python 模块 [重复]

当我在 python 中编写自己的模块时,导入模块的正确方法是啥?

无法在 Python 中导入我自己的模块