在C ++中我会写:
namespace LowerLevel{
int DoStuff() {}; //
}
通过以下方式访问:
LowerLevel::DoStuff()
我如何在Python中完成这两项工作?
答案 0 :(得分:5)
精神上最接近的是使用模块。
在文件lower_level.py
中,您有
def do_stuff():
pass
然后在其他地方做:
import lower_level
lower_level.do_stuff()
EDIT / addendums:这是一种简单的方法。像包这样的东西,你有一个文件夹lower_level
,在那个文件夹里面是一个__init__.py
标识lower_level
作为一个包。在该软件包中,您有.py
个文件作为模块,或者您将某些导入和声明放入__init__.py
。但它也可以保持空洞。我猜包会相当于嵌套的命名空间。
- prog.py
\MyNameSpaceA
- __init__.py # just an empty file
- ObjA.py # A python Module
\SubPackageB
- __init__.py
- ObjB.py # another python module
答案 1 :(得分:1)
另一种选择是在函数中定义所有内容并返回本地。优点是所有定义都在同一范围内,因此它们可以互相引用而没有任何前缀。同样,您可以在同一文件中拥有许多这些文件。
import argparse
def InitLowerLevel():
def DoStuff():
return 1
def DoOtherStuff():
return DoStuff()
kFoo = 0
return argparse.Namespace(**locals())
lower_level = InitLowerLevel()
lower_level.DoStuff()
答案 2 :(得分:0)
GetRealObject
模块也可以考虑使用,具体取决于您的用例。最初的答案就是我所说的更好的软件开发最佳实践,但是此模块提供了您最初要求的功能。
它允许点表示法设置和获取变量。但是,当您尝试添加新的变量/函数时,抱怨不如命令。
Python 3
IPAddress
尽管可以在documentation处找到使用argparse
的正确方法
,可以在此StackOverflow question上找到更多示例(如果您通过示例更好地理解,会有所帮助!)