2017-07-04 49 views
0

我想弄清楚如何让一个系统,我正在使用的UI项目的主题管理器,我正在努力正常工作。Python超级()和继承的类目录位置

例子:

文件结构:

element.py - class Element() 
button.py  - class Button(Element) 
text.py  - class Text(Element) 
input/text.py - class Text(Element) 

我使用类名在我的主题不同的属性。 (类似于CSS)

所以'元素'可以使文本颜色为白色。

目前,我有所有UI元素的“元素”继承和使用:

self.__class__.__name__.lower() 

这是工作的“按钮”和“元素”,问题就来了成input.text VS文字游戏。文本用于显示文本的所有用途,因此它几乎在所有元素中使用,但input.text类也被命名为Text,用于Text Input,我希望使用像'input.text'这样的属性选择器而不是'text '我现在用class.name得到它。

我想在最后设置它,所以它有一个插件系统为他人添加元素,并能够使用目录结构作为属性选择器的一部分。

例如:

Button class: button 
Text class: text 
Text Input class: text, but in the directory 'input' 

我试图找出如何让Python来检查,如果“自我”的元素从超()调用是在下面,其中“element.py”是一个目录。这会将目录名称添加到它检查的属性的类名称中。

最终结果将是:

element 
button 
text 
input.text 

TLDR:我需要知道如何检查,如果继承的类是在不同的目录的基类,什么该目录被调用。

感谢您对此进行任何帮助。

+0

我不相信你想要做的事情很容易实现或一个好主意。我推荐(没有特定的顺序)1)将input/text.py中的类重命名为'InputText',2)根据文件路径和名称单独建立一个类名(这不是一个好主意,而是比使用类名和文件路径要好),或者3)默认为类名,但允许类通过在某处指定可选字段来覆盖名称。如果您希望获得某些帮助,请编辑您的问题。 – supersam654

回答

0

好的,我发现如何按照我想要的方式做到这一点。只是回答这个问题,而我也想到@ supersam654的评论。

我能找到如何从继承的类与获取路径:

import os, sys 

el = os.path.dirname(sys.modules[self.__class__.__module__].__file__).split('/') 
base = os.path.dirname(__file__).split('/') 
for i in base: 
    el.remove(i) 

任何东西“厄尔尼诺”遗留下来都会有,我可以使用单独的目录名。