黒魔術(初級)のお時間です。オブジェクトのメンバーには実は setattr()
と getattr()
を使い 変数でアクセスできます。例えば
Python
1class Foo():
2 pass
みたいな空のクラスがあったとして
Python
1bar = Foo()
2bar.x = 1
3baz = bar.x
は
Python
1bar = Foo()
2setattr(bar, 'x', 1)
3baz = getattr(bar, 'x')
と等価です。
これを利用すれば長い self
への代入もいくらかマシになるでしょう。
Python
1def __init__(self, obj):
2 for n in ['foo', 'bar', 'baz']:
3 setattr(self, n, getattr(obj, n))
更にトリッキーな方法もありますが、それはまた別の機会にでも……。
まーもっと悪くしちゃうよね
ppaul さんのを改良(改悪?)
Python
1def __init__(self, obj):
2 self.__dict__.update([k, v] for k, v in obj.__dict__.items() if not hasattr(obj.__dict__[k], '__call__'))
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/30 07:42