【发布时间】:2018-08-25 12:31:54
【问题描述】:
我正在尝试在 python 中“模拟”命名空间。我正在使用内部和外部类层次结构来创建我的命名空间。例如,您想将文件的路径(如资源)保存在一个位置。我尝试过这样的事情:
src = #path to source folder
class Resources:
root = src + "Resources\\"
class Fonts:
root = Resources.root + "fonts\\"
font1 = root + "font1.ttf"
font2 = root + "font2.ttf"
class Images:
root = Resources.root + "images\\"
logo = root + "logo"
image1= root + "image1"
class StyleSheets:
root = Resources.root + "stylesheets\\"
default = root + "default.qss"
class JsonData:
root = src + "Data\\"
class TableEntries:
root = JsonData.root
entries1 = root + "Entries1.json"
entries2 = root + "Entries2.json"
访问元素如下所示:
logoPath = Resources.Images.image1
很遗憾,由于以下错误,这不起作用:
root = Resources.root + "fonts\\"
NameError: name 'Resources' is not defined
我的问题
是否可以根据外部类的类变量设置内部类的类变量?如果没有,是否有另一种方法可以在不使用多个文件的情况下访问上述元素?
【问题讨论】:
-
为什么我们不使用字典?在
Resources类定义之外,定义完成后Resources.Fonts.root = Resources.root + "fonts\\"将起作用,但您为什么要这样做? -
python中的命名空间是通过使用子模块来模拟的,而不是使用内部类。
-
@StephenRauch 你能举一个例子来说明你的字典解决方案吗?是的,在类外设置变量会起作用,但是我必须声明
Resources.Fonts.font1 = Resources.Fonts.root + "font1.tff",这看起来也很奇怪。我想要干净的结构化代码。在我看来,访问上述资源可以提高可读性和可变性。 -
@Adirio 这意味着我必须创建多个文件,对吗?我想故意避免这种情况。
标签: python namespaces