概要
Ruby だと puts や pp などでオブジェクト内の attributes の参照ができます
もしくは instance_variables
をコールしても attributes の参照ができます
メソッドの参照をするには methods
などを使えばできます
Python3 でも方法があるようなのでやってみました
環境
- macOS X 10.13.6
- Python 3.6.5
attributes を参照する方法
__dict__
を使う
対象のオブジェクトの __dict__
を参照します
これで attributes が key - value 形式で取得できます
- vim attributes.py
class Hoge(object):
def __init__(self):
self.a = 'a'
self.b = 'b'
def func1(self):
return self.a
h = Hoge()
print(h.__dict__)
- python3 attributes.py
ただし以下のように別のクラスのオブジェクトを持っている場合は展開しません
class Fuga(object):
def __init__(self):
self.c = 'c'
self.d = 'd'
def func1(self):
return self.c
class Hoge(object):
def __init__(self):
self.a = 'a'
self.b = 'b'
self.f = Fuga()
def func1(self):
return self.a
h = Hoge()
print(h.__dict__)
- python3 attributes.py
{'a': 'a', 'b': 'b', 'f': <__main__.Fuga object at 0x10e34aa20>}
vars() を使う
中身は __dict__
と同じらしいです
最後の部分を以下のように書き換えれば OK です
- vim attributes2.py
print(vars(h))
ただしこの場合もネスト的に展開はしてくれません
メソッドを参照する方法
いきなり複雑になりますが以下の通りです
dir()
と getattr()
を使います
- methods.py
class Fuga(object):
def __init__(self):
self.c = 'c'
self.d = 'd'
def func1(self):
return self.c
class Hoge(object):
def __init__(self):
self.a = 'a'
self.b = 'b'
self.f = Fuga()
def func1(self):
return self.a
h = Hoge()
methods = [method for method in dir(h) if callable(getattr(h, method))]
print(methods)
最後に
Python3 でオブジェクトが持つ attributes とメソッドを参照する方法を紹介しました
正直 Ruby のように簡単にはいきませんができるのはできました
0 件のコメント:
コメントを投稿