[解決済み】pythonでオブジェクトの属性を繰り返し処理する【重複あり
2022-04-11 14:24:43
質問
私はいくつかの属性とメソッドを持つPythonのオブジェクトを持っています。 私はオブジェクトの属性を繰り返し処理したいです。
class my_python_obj(object):
attr1='a'
attr2='b'
attr3='c'
def method1(self, etc, etc):
#Statements
オブジェクトのすべての属性とその現在の値を含む辞書を生成したいのですが、それを動的な方法で行いたいと思います (後で別の属性を追加する場合、関数も忘れずに更新する必要がないように)。
phpでは変数をキーとして使うことができますが、pythonのオブジェクトは原稿を書くことができないので、このためにドット記法を使うと、私の意図しないvarの名前で新しい属性が作成されてしまうのです。
わかりやすくするために
def to_dict(self):
'''this is what I already have'''
d={}
d["attr1"]= self.attr1
d["attr2"]= self.attr2
d["attr3"]= self.attr3
return d
-
def to_dict(self):
'''this is what I want to do'''
d={}
for v in my_python_obj.attributes:
d[v] = self.v
return d
更新しました。 属性とは、このオブジェクトの変数のみを意味し、メソッドではありません。
解決方法は?
のようなクラスがあると仮定します。
>>> class Cls(object):
... foo = 1
... bar = 'hello'
... def func(self):
... return 'call me'
...
>>> obj = Cls()
呼び出し
dir
は、python の特殊な属性を含む、そのオブジェクトのすべての属性を返します。ただし、オブジェクトの属性の中には、メソッドなど呼び出し可能なものもあります。
>>> dir(obj)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar', 'foo', 'func']
リスト内包を使えば、いつでも特殊なメソッドをフィルタリングすることができます。
>>> [a for a in dir(obj) if not a.startswith('__')]
['bar', 'foo', 'func']
または、map/filters を好む場合。
>>> filter(lambda a: not a.startswith('__'), dir(obj))
['bar', 'foo', 'func']
メソッドをフィルタリングしたい場合は、組み込みの
callable
をチェックとして使用します。
>>> [a for a in dir(obj) if not a.startswith('__') and not callable(getattr(obj, a))]
['bar', 'foo']
を使って、クラスとそのインスタンス・オブジェクトの違いを検査することもできます。
>>> set(dir(Cls)) - set(dir(object))
set(['__module__', 'bar', 'func', '__dict__', 'foo', '__weakref__'])
関連
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python関数の高度な応用を解説
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み] データ型が理解できない
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み] オブジェクトの現在のプロパティと値をすべて表示する組み込み関数はありますか?
-
[解決済み] Pythonでオブジェクトのプロパティを列挙する方法は?[重複しています]。
-
[解決済み] Pythonで明示的な'self'を避けるには?