継承チェーン内のすべてのクラスの属性を返すにはどうすればよいですか?

lesnik

クラス階層があり、一部のクラス属性が子クラスでオーバーライドされている場合、子クラスのユーザーは、親クラスでのこの属性の値を気にする必要はありません。

しかし、これは私が達成したいことです:

class A:
    _ITEM = "A"

    @classmethod
    def getClassPath(cls):
        ???


class B(A):
    _ITEM = "B"


class C(B):
    _ITEM = "C"


# expected behavior:
A.getClassPath()  # "/A"
B.getClassPath()  # "/A/B"
C.getClassPath()  # "/A/B/C"

私の元の問題はもう少し複雑ですが、これに還元さ_ITEMれます。階層内のすべてのクラスから属性を取得し、それらを何らかの方法で結合します。

どうすればいいですか?私の場合、多重継承はありません。

anon01

あなたが使用することができますmro継承チェーンにアクセス属性に(メソッド解決順序を)。単純なケース:

class A:
    _ITEM = "A"
    
    @classmethod
    def get_class_path(cls):
        result = cls.mro()[:-1]
        result = [res._ITEM for res in reversed(result)]
        result = "/" + "/".join(result)
        return result

さらに、を持たないクラスをスキップしたい場合は_ITEM、次のように少し変更できますvars()

class A:
    _ITEM = "attr_A"

    @classmethod
    def get_class_path(cls):
        mro_list = reversed(cls.mro()[:-1])

        result = []
        for obj in mro_list:
            if "_ITEM" in vars(obj):
                result.append(obj._ITEM)

        result = "/" + "/".join(result)
        return result

class B(A):
    # _ITEM = "attr_B"
    pass

class C(B):
    _ITEM = "attr_C"

出力:

B.get_class_path() # returns '/attr_A'
C.get_class_path() # returns '/attr_A/attr_C'

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

親クラスのすべての機能を継承するにはどうすればよいですか?

分類Dev

継承チェーンの途中にクラスを挿入するにはどうすればよいですか?

分類Dev

VueJSの小道具-「クラス」属性の継承を回避するにはどうすればよいですか?

分類Dev

C ++では、クラスが継承チェーンの最後のクラス/子であるかどうかを確認するにはどうすればよいですか?つまり、基本クラスの反対側にあります

分類Dev

すべての変数を親クラスからinit関数を持つ基本クラスに継承するにはどうすればよいですか?

分類Dev

クラスにインターフェイスを実装し、別のクラスから継承させるにはどうすればよいですか?

分類Dev

さまざまに継承されたすべてのクラスの関数を呼び出すにはどうすればよいですか?

分類Dev

すべての要素に基本クラスから1つの特定のプロパティを継承させるにはどうすればよいですか?

分類Dev

Collection <>を継承するクラス内のコレクションにアクセスするにはどうすればよいですか?

分類Dev

GroupBox内のすべてのチェックボックスをチェック/チェック解除するにはどうすればよいですか?

分類Dev

多重継承を使用していくつかの親クラス属性値を取得するにはどうすればよいですか?

分類Dev

セレンウェブドライバーを使用してクラス内のreact要素の属性を取得するにはどうすればよいですか?

分類Dev

QT Creatorで継承されたクラスのオブジェクトとしてQWidgetを宣言するにはどうすればよいですか?

分類Dev

ジェネリッククラスから継承するすべてのタイプのコレクションを取得するにはどうすればよいですか?

分類Dev

特定の属性のみを継承するオブジェクトのエイリアスを作成するにはどうすればよいですか

分類Dev

基本クラス[継承]に属する子クラスオブジェクトのプロパティ(属性)を設定するにはどうすればよいですか?(ベースの属性を子に渡す)

分類Dev

2つのクラスからUITextFieldを継承するにはどうすればよいですか?

分類Dev

継承で特定の基本クラスを取得するにはどうすればよいですか?

分類Dev

クラスデコレータを継承チェーンの最も外側のクラスでのみ実行するにはどうすればよいですか?

分類Dev

次のクラス継承を設計するにはどうすればよいですか?

分類Dev

プロジェクト内のすべてのフォームのインスタンスを作成するにはどうすればよいですか?

分類Dev

クラス内の各オブジェクトのすべてのデータを印刷するにはどうすればよいですか?

分類Dev

クラスのすべての属性を取得するにはどうすればよいですか?

分類Dev

リダイレクトチェーン内のすべてのURLを表示するにはどうすればよいですか?

分類Dev

リダイレクトチェーン内のすべてのURLを表示するにはどうすればよいですか?

分類Dev

マルチモジュールのMavenプロジェクトのスーパープロジェクトから依存関係バージョンを継承するようにするには、どうすればよいですか?

分類Dev

Sphinxドキュメントでクラスの継承されたメンバーを表示するにはどうすればよいですか?

分類Dev

継承されるデータクラスにオプションのフィールドを作成するにはどうすればよいですか?

分類Dev

super()を使用して、複数の父親クラスから特定のクラスを継承するにはどうすればよいですか?

Related 関連記事

  1. 1

    親クラスのすべての機能を継承するにはどうすればよいですか?

  2. 2

    継承チェーンの途中にクラスを挿入するにはどうすればよいですか?

  3. 3

    VueJSの小道具-「クラス」属性の継承を回避するにはどうすればよいですか?

  4. 4

    C ++では、クラスが継承チェーンの最後のクラス/子であるかどうかを確認するにはどうすればよいですか?つまり、基本クラスの反対側にあります

  5. 5

    すべての変数を親クラスからinit関数を持つ基本クラスに継承するにはどうすればよいですか?

  6. 6

    クラスにインターフェイスを実装し、別のクラスから継承させるにはどうすればよいですか?

  7. 7

    さまざまに継承されたすべてのクラスの関数を呼び出すにはどうすればよいですか?

  8. 8

    すべての要素に基本クラスから1つの特定のプロパティを継承させるにはどうすればよいですか?

  9. 9

    Collection <>を継承するクラス内のコレクションにアクセスするにはどうすればよいですか?

  10. 10

    GroupBox内のすべてのチェックボックスをチェック/チェック解除するにはどうすればよいですか?

  11. 11

    多重継承を使用していくつかの親クラス属性値を取得するにはどうすればよいですか?

  12. 12

    セレンウェブドライバーを使用してクラス内のreact要素の属性を取得するにはどうすればよいですか?

  13. 13

    QT Creatorで継承されたクラスのオブジェクトとしてQWidgetを宣言するにはどうすればよいですか?

  14. 14

    ジェネリッククラスから継承するすべてのタイプのコレクションを取得するにはどうすればよいですか?

  15. 15

    特定の属性のみを継承するオブジェクトのエイリアスを作成するにはどうすればよいですか

  16. 16

    基本クラス[継承]に属する子クラスオブジェクトのプロパティ(属性)を設定するにはどうすればよいですか?(ベースの属性を子に渡す)

  17. 17

    2つのクラスからUITextFieldを継承するにはどうすればよいですか?

  18. 18

    継承で特定の基本クラスを取得するにはどうすればよいですか?

  19. 19

    クラスデコレータを継承チェーンの最も外側のクラスでのみ実行するにはどうすればよいですか?

  20. 20

    次のクラス継承を設計するにはどうすればよいですか?

  21. 21

    プロジェクト内のすべてのフォームのインスタンスを作成するにはどうすればよいですか?

  22. 22

    クラス内の各オブジェクトのすべてのデータを印刷するにはどうすればよいですか?

  23. 23

    クラスのすべての属性を取得するにはどうすればよいですか?

  24. 24

    リダイレクトチェーン内のすべてのURLを表示するにはどうすればよいですか?

  25. 25

    リダイレクトチェーン内のすべてのURLを表示するにはどうすればよいですか?

  26. 26

    マルチモジュールのMavenプロジェクトのスーパープロジェクトから依存関係バージョンを継承するようにするには、どうすればよいですか?

  27. 27

    Sphinxドキュメントでクラスの継承されたメンバーを表示するにはどうすればよいですか?

  28. 28

    継承されるデータクラスにオプションのフィールドを作成するにはどうすればよいですか?

  29. 29

    super()を使用して、複数の父親クラスから特定のクラスを継承するにはどうすればよいですか?

ホットタグ

アーカイブ