创建我自己的 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.buildout
或virtualenv
之类的工具(第一个更强大,但更复杂,通常在您需要开发环境构建系统时很有用,第二个一个非常简单易用,确实有助于让您的环境为开发做好准备)。
您可以在此处找到两者的教程:
http://simononsoftware.com/virtualenv-tutorial/ http://www.buildout.org/docs/tutorial.htmlHTH
【讨论】:
【参考方案2】:您不一定非要在 python 中创建一个类,但使用类可以帮助您将函数和变量包装到一个对象中。
【讨论】:
以上是关于创建我自己的 python 模块 - 问题的主要内容,如果未能解决你的问题,请参考以下文章
创建自己的python模块,并使用pip install安装到python环境