- 如何继续使用名为 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
然后当你制作一个模块时,你根据你需要它们做什么来声明函数和对象。如果您有一组处理同一组变量的函数,您将希望将它们封装为一个类中的“成员”,将这些函数制作成将作用于这些成员的方法,为该类创建一个行为并公开向您的模块的用户提供该类。然后,他们会将您的类实例化为具有自己价值的对象并感到高兴。
如果您的函数正在接受参数,将它们转换为一组结果而不与函数外部的变量交互,那么您将希望保持它们原样:只是简单的函数。
所以,总而言之,这是一个软件设计的问题,并且有很多关于这个主题的书籍,在互联网上和图书馆里。我很确定你可以找到一个关于“什么是 最好的 OO 软件 设计 书? ”的问题。
- 是“安装”我的模块还是像外部文件一样使用它更好?
在分发代码时使用distutils
/安装模块总是更好。setuptools
为了帮助您开发软件,您最好使用类似zc.buildout
or的工具virtualenv
(第一个更强大,但更复杂,通常在您需要 dev env 构建系统时很有用,第二个非常易于使用并且确实有助于让您的环境为开发做好准备)。
您可以在那里找到两者的教程:
高温高压