2017-07-04 6 views
0

私は正しく動作するように取り組んでいるUIプロジェクトのテーママネージャにどのようなシステムを使用しているのか把握しようとしています。Python super()と継承したクラスディレクトリの場所

例:

ファイル構造:

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のために戦場に出ます。テキストはすべての要素に表示されるようにテキストを表示するためのものですが、input.textクラスにはTextという名前も付けられていますが、テキスト入力にも使用されており、 'text'の代わりに 'input.text'私は今クラスに名前をつけています。名前。

これを最後に設定しようとしているので、他の人が要素を追加し、ディレクトリ構造をプロパティセレクタの一部として使用できるようにするプラグインシステムがあります。

例えば

:私はスーパー()の呼び出しからの要素の「自己」「element.py」であるところ、以下のディレクトリにあるかどうかを確認するためのpythonを取得する方法を把握しようとしています

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

。これは、チェックするプロパティのクラス名にディレクトリ名を追加します。

最終的な結果は次のようになります。

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) 

関連する問題