94637


Pythonのクラスに定義されている、スタティックフィールド（クラスの属性値、以下のvalue変数）を、一覧で取得したいのですが、  
どのようにすればよいでしょうか？  
以下のように、inspectパッケージのgetmembersメソッドを利用することで、  
メソッドの一覧や、すべての属性の一覧は取得することができました。  
スタティックフィールドのみの一覧を取得することは可能でしょうか。

以下のサイトにたどり着いたのですが、読み解けませんでした。。  
<https://docs.python.org/ja/3/library/inspect.html>

[code]

    import inspect
    
    
    class TestClass():
        value = '##'  # ←このフィールドと、その値をリフレクションで取得したい。
    
        def test_method(self, a: int = 1, b: str = '@@') -> str:
            print(a, b)
            return b
    
    
    # functions = dict(inspect.getmembers(TestClass, inspect.isfunction))  # ←メソッドの一覧は取得できました。
    functions = dict(inspect.getmembers(TestClass))
    for key, func in functions.items():
        print(key, func)
    
[/code]

以下は、実行結果です。  
inspect.getmembers()メソッドで、value ##の行のみ抽出できないでしょうか？

[code]

    __class__ <class 'type'>
    __delattr__ <slot wrapper '__delattr__' of 'object' objects>
    __dict__ {'__module__': '__main__', 'value': '##', 'test_method': <function TestClass.test_method at 0x7f4a763bae50>, '__dict__': <attribute '__dict__' of 'TestClass' objects>, '__weakref__': <attribute '__weakref__' of 'TestClass' objects>, '__doc__': None}
    __dir__ <method '__dir__' of 'object' objects>
    __doc__ None
    __eq__ <slot wrapper '__eq__' of 'object' objects>
    __format__ <method '__format__' of 'object' objects>
    __ge__ <slot wrapper '__ge__' of 'object' objects>
    __getattribute__ <slot wrapper '__getattribute__' of 'object' objects>
    __gt__ <slot wrapper '__gt__' of 'object' objects>
    __hash__ <slot wrapper '__hash__' of 'object' objects>
    __init__ <slot wrapper '__init__' of 'object' objects>
    __init_subclass__ <built-in method __init_subclass__ of type object at 0x3bc3960>
    __le__ <slot wrapper '__le__' of 'object' objects>
    __lt__ <slot wrapper '__lt__' of 'object' objects>
    __module__ __main__
    __ne__ <slot wrapper '__ne__' of 'object' objects>
    __new__ <built-in method __new__ of type object at 0x9085a0>
    __reduce__ <method '__reduce__' of 'object' objects>
    __reduce_ex__ <method '__reduce_ex__' of 'object' objects>
    __repr__ <slot wrapper '__repr__' of 'object' objects>
    __setattr__ <slot wrapper '__setattr__' of 'object' objects>
    __sizeof__ <method '__sizeof__' of 'object' objects>
    __str__ <slot wrapper '__str__' of 'object' objects>
    __subclasshook__ <built-in method __subclasshook__ of type object at 0x3bc3960>
    __weakref__ <attribute '__weakref__' of 'TestClass' objects>
    test_method <function TestClass.test_method at 0x7f4a763bae50>
    value ##
    
[/code]


CC BY-SA 4.0
2023-04-24T10:54:22.213
94636
2023-04-24T14:10:54.807
35267
question
python python3
Pythonのクラスから、スタティックフィールドの一覧を取得する方法

[code]

    import inspect
    
    class TestClass():
        value = '##'
    
        def test_method(self, a: int = 1, b: str = '@@') -> str:
            print(a, b)
            return b
    
    if __name__ == '__main__':
        class_variables = [i for i in inspect.getmembers(TestClass, predicate=lambda x: not callable(x))
                           if not i[0].startswith('_')]
        print(class_variables)
    
    # [('value', '##')]
    
[/code]


CC BY-SA 4.0
2023-04-24T14:10:54.807
94637
2023-04-24T14:10:54.807
47127
94636
answer