Skip to content

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

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

検証環境

対象 バージョン
macOS 15.0
Python 3.11.10

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

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

サンプルコード

1
2
3
4
5
6
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() であるもの だけを抽出します。

サンプルコード

1
2
3
4
5
6
7
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() ではないもの だけを抽出します。

サンプルコード

1
2
3
4
5
6
7
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 を使います。

サンプルコード

1
2
3
4
5
6
import inspect

from pydub import AudioSegment

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

実行結果

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