コンテンツにスキップ

Python のインスタンスから「メソッドだけ」「変数だけ」などの情報を取得する

Python でインスンタンスから「メソッドと変数」を取得するには組み込み関数である dir() を利用します。 dir() を活用し、インスタンスから「メソッドだけ」や「変数だけ」を取得する方法をメモしておきます。 対象は何でも良かったのですが、今回は pydub に対して実行してみました。

検証環境

対象 バージョン
macOS 15.0
Python 3.11.10

メソッド・変数を取得する

メソッドと変数の両方を取得するには dir() を利用します。

サンプルコード

from pprint import pprint

from pydub import AudioSegment

instance = AudioSegment.from_mp3("test.mp3")
pprint(dir(instance))

実行結果

$ python3 sample1.py
['DEFAULT_CODECS',
 '__add__',
 '__class__',
 '__delattr__',
 '__dict__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__getstate__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__iter__',
 '__le__',
 '__len__',
 '__lt__',
 '__module__',
 '__mul__',
 '__ne__',
 '__new__',
 '__radd__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__sub__',
 '__subclasshook__',
 '__weakref__',
 '_data',
 '_from_safe_wav',
 '_parse_position',
 '_repr_html_',
 '_spawn',
 '_sync',
 'append',
 'apply_gain',
 'apply_gain_stereo',
 'apply_mono_filter_to_each_channel',
 'array_type',
 'channels',
 'compress_dynamic_range',
 'converter',
 'dBFS',
 'duration_seconds',
 'empty',
 'export',
 'fade',
 'fade_in',
 'fade_out',
 'ffmpeg',
 'frame_count',
 'frame_rate',
 'frame_width',
 'from_file',
 'from_file_using_temporary_files',
 'from_flv',
 'from_mono_audiosegments',
 'from_mp3',
 'from_ogg',
 'from_raw',
 'from_wav',
 'get_array_of_samples',
 'get_dc_offset',
 'get_frame',
 'get_sample_slice',
 'high_pass_filter',
 'invert_phase',
 'low_pass_filter',
 'max',
 'max_dBFS',
 'max_possible_amplitude',
 'normalize',
 'overlay',
 'pan',
 'raw_data',
 'remove_dc_offset',
 'reverse',
 'rms',
 'sample_width',
 'set_channels',
 'set_frame_rate',
 'set_sample_width',
 'silent',
 'speedup',
 'split_to_mono',
 'strip_silence']

メソッドだけ取得する

メソッドだけを取得したい場合、dir() した結果から callable() であるもの だけを抽出します。

サンプルコード

from pprint import pprint

from pydub import AudioSegment

instance = AudioSegment.from_mp3("test.mp3")
items = [item for item in dir(instance) if callable(getattr(instance, item))]
pprint(items)

実行結果

$ python3 sample2.py
['__add__',
 '__class__',
 '__delattr__',
 '__dir__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__getstate__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__iter__',
 '__le__',
 '__len__',
 '__lt__',
 '__mul__',
 '__ne__',
 '__new__',
 '__radd__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__sub__',
 '__subclasshook__',
 '_from_safe_wav',
 '_parse_position',
 '_repr_html_',
 '_spawn',
 '_sync',
 'append',
 'apply_gain',
 'apply_gain_stereo',
 'apply_mono_filter_to_each_channel',
 'compress_dynamic_range',
 'empty',
 'export',
 'fade',
 'fade_in',
 'fade_out',
 'frame_count',
 'from_file',
 'from_file_using_temporary_files',
 'from_flv',
 'from_mono_audiosegments',
 'from_mp3',
 'from_ogg',
 'from_raw',
 'from_wav',
 'get_array_of_samples',
 'get_dc_offset',
 'get_frame',
 'get_sample_slice',
 'high_pass_filter',
 'invert_phase',
 'low_pass_filter',
 'normalize',
 'overlay',
 'pan',
 'remove_dc_offset',
 'reverse',
 'set_channels',
 'set_frame_rate',
 'set_sample_width',
 'silent',
 'speedup',
 'split_to_mono',
 'strip_silence']

変数だけ取得する

変数だけを取得したい場合、「メソッドだけを取得する」場合と考え方が逆になります。 具体的には dir() した結果から callable() ではないもの だけを抽出します。

サンプルコード

from pprint import pprint

from pydub import AudioSegment

instance = AudioSegment.from_mp3("test.mp3")
items = [item for item in dir(instance) if not callable(getattr(instance, item))]
pprint(items)

実行結果

$ python3 sample3.py
['DEFAULT_CODECS',
 '__dict__',
 '__doc__',
 '__module__',
 '__weakref__',
 '_data',
 'array_type',
 'channels',
 'converter',
 'dBFS',
 'duration_seconds',
 'ffmpeg',
 'frame_rate',
 'frame_width',
 'max',
 'max_dBFS',
 'max_possible_amplitude',
 'raw_data',
 'rms',
 'sample_width']

引数を取得する

メソッドの引数を知りたい場合は inspectsignature を使います。

サンプルコード

import inspect

from pydub import AudioSegment

instance = AudioSegment.from_mp3("test.mp3")
print(inspect.signature(instance.from_mp3))

実行結果

$ python3 sample4.py
(file, parameters=None)