Python super()和继承的类目录位置

时间:2017-07-04 18:28:02

标签: python structure

我正在试图找出如何获得我正在使用的UI系统的主题管理器系统,我正在努力正常工作。

示例:

文件结构:

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

我在我的主题中为不同的属性使用class-name。 (与CSS类似)

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

我目前所有的UI元素都继承自'Element'并使用:

self.__class__.__name__.lower()

这适用于'Button'和'Element',这个问题在input.text vs text中起作用。文本适用于显示文本的所有用途,因此它几乎存在于所有Elements中,但input.text类被命名为Text,也用于文本输入,我想使用像'input.text'这样的属性选择器而不仅仅是'text “我现在可以通过class.name获得它。

我正在尝试将其设置为最终,因此它有一个插件系统供其他人添加元素并能够将目录结构用作属性选择器的一部分。

例如:

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

我试图找出如何让python检查来自super()调用的元素中的'self'是否在'element.py'所在的目录下。这将在目录名称上添加它所检查的属性的类名。

最终结果将是:

element
button
text
input.text

TLDR:我需要知道如何检查继承的类是否在与基类不同的目录中以及该目录的调用内容。

感谢您帮助解决这个问题。

1 个答案:

答案 0 :(得分: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)

'el'中遗留的任何内容都有我可以使用的单独目录名。