1. ホーム
  2. パイソン

[解決済み】オブジェクトのメソッドと属性の完全なリストを取得する方法は?[重複している]。

2022-04-02 07:18:15

質問

dir(re.compile(pattern)) 

はリストの要素の一つとして pattern を返しません。つまり

['__copy__', '__deepcopy__', 'findall', 'finditer', 'match', 'scanner', 'search', 'split', 'sub', 'subn']

マニュアルによると、以下のものが含まれることになっています。

オブジェクトの属性名と そのクラスの属性の名前、そして の属性が再帰的に表示されます。 クラスの基底クラスである。

また、次のようにも書かれています。

このリストは必ずしも完全なものではありません。

を取得する方法はあるのでしょうか? コンプリート のリストですか?私はいつもdirが完全なリストを返すと思っていたのですが、どうやらそうではないようです...。

また、属性のみをリストアップする方法はありますか?あるいはメソッドのみをリストアップする方法はありますか?

編集:これは実際にはpythonのバグです -> おそらく3.0ブランチで修正されています(そしておそらく2.6でも)

解決方法は?

については コンプリート の属性リストがありますが、簡単に言うと「いいえ」です。問題は、属性が実際には getattr 組み込み関数です。ユーザが再実装できるように __getattr__ このリストを生成する一般的な方法はありません。そのため dir 関数は __dict__ 属性、すなわち __getattr__ メソッドが再実装されていない。

2つ目の質問については、あまり意味がありません。実は、メソッドは呼び出し可能な属性であり、それ以上のものではありません。しかし、呼び出し可能な属性をフィルタリングすることは可能で、そのためには inspect モジュールは、クラスメソッド、メソッド、または関数を決定します。