python inspect @ propertyで装飾されたgetメソッド

iLoveTux

これは私の実際の問題の単純化された例です。

私はfooこのように定義されたクラスを持っていますfoo.py

class foo(object):
    def __init__(self):
        pass

    def bar(self):
        return True

    @property
    def baz(self):
        return False

ここで、inspectモジュールを使用しfooクラスのメソッド(を含むbazを取得したいと思いますこれは私がこれまでに持っているものですgetmethods.py

import foo
import inspect

classes = inspect.getmembers(foo, inspect.isclass)
for cls in classes:
    methods = inspect.getmembers(cls[1], inspect.ismethod)
    print methods

このスクリプトを実行すると、次の出力が得られます(これはまったく予期しないことではありません)。

[('__init__', <unbound method foo.__init__>), ('bar', <unbound method foo.bar>)]

だから、私の質問は、なぜ正確にbazメソッドと見なされないのかgetmethods.py、そして次の出力を取得するためにどのように変更できるのかということです

[('__init__', <unbound method foo.__init__>), ('bar', <unbound method foo.bar>), ('baz', <property object at 0x7fbc1a73d260>)]
Martijn Pieters

@propertyデコレータは生成propertyオブジェクトではなく、関数またはメソッドを。それが中に記憶された関数を呼び出し、このオブジェクトであり.fget.fsetそして.fdel(を通じてアクセスするとき、そのオブジェクトの属性記述プロトコル)。

そのオブジェクトタイプを明示的にテストする必要があります。

methods = inspect.getmembers(cls[1], inspect.ismethod)
properties = inspect.getmembers(cls[1], lambda o: isinstance(o, property))

または

methods_and_properties = inspect.getmembers(
    cls[1], lambda o: isinstance(o, (property, types.MethodType)))

同じ制限を適用することを注記classmethodしてstaticmethodオブジェクト。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

python inspect identifying function that are overridden

分類Dev

ruby inspectメソッドに相当するPythonはありますか?

分類Dev

Pythonはクラスで@ property.setter装飾メソッドを取得します

分類Dev

Python-ソースコード順にinspect.getmembers

分類Dev

Python、装飾された関数の参照クラスインスタンス/メソッド

分類Dev

Python 3.xでinspect.getmembers()を壊す__getattr__特別なメソッドの回避策

分類Dev

Pythonクラスで実装されたメソッドのリスト

分類Dev

Pythonで追加されたメソッド

分類Dev

python-inspectはFunctionTypeで生成された関数ではうまく機能しません

分類Dev

Python Inspect モジュールが pyqt クラスを見つけられない

分類Dev

Pythonクラスのメソッドを装飾するための最良の方法は何ですか?

分類Dev

Pythonで__setatr__メソッドを装飾することは可能ですか?

分類Dev

Pythonでメソッドを飾る

分類Dev

How to inspect generators in the repl/ipython in Python3

分類Dev

How print python method documentation using inspect or __doc__ method

分類Dev

Python:特別な(dunder)メソッドを装飾する方法

分類Dev

inspect要素を使用してアップロードされた画像

分類Dev

inspectを使用してバインドされたメソッドからクラス名を取得するにはどうすればよいですか?

分類Dev

Python inspect.getcomments(module)は、シバンの場合、最初のコメントを返しません

分類Dev

メソッドまたは関数を装飾できるパラメーターを持つPythonクラスベースのデコレーター

分類Dev

Pythonで装飾するメソッド中に「self」パラメータを渡す

分類Dev

Pythonでの一般化された__eq __()メソッド

分類Dev

python-クラスのマルチメソッドを装飾しているときに自己を失った

分類Dev

Pythonで装飾された関数の引数のしくみ

分類Dev

メソッドtxpool_inspectが存在しない/使用できない

分類Dev

How to get the DOM content as seen in inspect element window after rendering?

分類Dev

以前に評価したプロパティがTrueでない場合にスキップするように、Pythonユニットテストメソッドを装飾するにはどうすればよいですか?

分類Dev

ノード `--inspect` フラグと Coffeescript

分類Dev

Pythonでジェネレーターを装飾する:yieldの間にメソッドを呼び出す

Related 関連記事

  1. 1

    python inspect identifying function that are overridden

  2. 2

    ruby inspectメソッドに相当するPythonはありますか?

  3. 3

    Pythonはクラスで@ property.setter装飾メソッドを取得します

  4. 4

    Python-ソースコード順にinspect.getmembers

  5. 5

    Python、装飾された関数の参照クラスインスタンス/メソッド

  6. 6

    Python 3.xでinspect.getmembers()を壊す__getattr__特別なメソッドの回避策

  7. 7

    Pythonクラスで実装されたメソッドのリスト

  8. 8

    Pythonで追加されたメソッド

  9. 9

    python-inspectはFunctionTypeで生成された関数ではうまく機能しません

  10. 10

    Python Inspect モジュールが pyqt クラスを見つけられない

  11. 11

    Pythonクラスのメソッドを装飾するための最良の方法は何ですか?

  12. 12

    Pythonで__setatr__メソッドを装飾することは可能ですか?

  13. 13

    Pythonでメソッドを飾る

  14. 14

    How to inspect generators in the repl/ipython in Python3

  15. 15

    How print python method documentation using inspect or __doc__ method

  16. 16

    Python:特別な(dunder)メソッドを装飾する方法

  17. 17

    inspect要素を使用してアップロードされた画像

  18. 18

    inspectを使用してバインドされたメソッドからクラス名を取得するにはどうすればよいですか?

  19. 19

    Python inspect.getcomments(module)は、シバンの場合、最初のコメントを返しません

  20. 20

    メソッドまたは関数を装飾できるパラメーターを持つPythonクラスベースのデコレーター

  21. 21

    Pythonで装飾するメソッド中に「self」パラメータを渡す

  22. 22

    Pythonでの一般化された__eq __()メソッド

  23. 23

    python-クラスのマルチメソッドを装飾しているときに自己を失った

  24. 24

    Pythonで装飾された関数の引数のしくみ

  25. 25

    メソッドtxpool_inspectが存在しない/使用できない

  26. 26

    How to get the DOM content as seen in inspect element window after rendering?

  27. 27

    以前に評価したプロパティがTrueでない場合にスキップするように、Pythonユニットテストメソッドを装飾するにはどうすればよいですか?

  28. 28

    ノード `--inspect` フラグと Coffeescript

  29. 29

    Pythonでジェネレーターを装飾する:yieldの間にメソッドを呼び出す

ホットタグ

アーカイブ