[解決済み] setattr__ の正しい使い方、無限再帰を回避する方法
質問
を含むクラスを定義したい。
read
と
write
メソッドがあり、以下のように呼び出すことができます。
instance.read
instance.write
instance.device.read
instance.device.write
インターレースされたクラスを使用しないために、私のアイディアは
__getattr__
と
__setattr__
メソッドを実行し、与えられた名前が
device
にリダイレクトします。
self
. しかし、無限回の再帰を与える問題に遭遇しました。コード例は以下の通りです。
class MyTest(object):
def __init__(self, x):
self.x = x
def __setattr__(self, name, value):
if name=="device":
print "device test"
else:
setattr(self, name, value)
test = MyTest(1)
のように
__init__
は、新しい属性を作成しようとしました。
x
を呼び出すと
__setattr__
を呼び出し、それがまた
__setattr__
といった具合です。このコードをどのように変更する必要があるかというと、この場合、新しい属性である
x
の
self
が作成され、値
1
?
または、次のような呼び出しを処理する良い方法はありますか?
instance.device.read
に「マップ」されます。
instance.read
?
常に「なぜ」という疑問があるように。を抽象化する必要があります。
xmlrpc
のような非常に簡単なメソッドを呼び出すことができます。
myxmlrpc.instance,device.read
などを作成することができます。このようなマルチドットメソッドの呼び出しを模倣するために、これを「モック」する必要があります。
どのように解決するのですか?
親クラスを呼び出す必要があります。
__setattr__
メソッドを使用します。
class MyTest(object):
def __init__(self, x):
self.x = x
def __setattr__(self, name, value):
if name=="device":
print "device test"
else:
super(MyTest, self).__setattr__(name, value)
# in python3+ you can omit the arguments to super:
#super().__setattr__(name, value)
ベストプラクティスの件ですが、これを経由して使う予定なので
xml-rpc
の中で行うのが良いかと思います。
_dispatch
メソッドを使用します。
手っ取り早いのは、単純に実行することです。
class My(object):
def __init__(self):
self.device = self
関連
-
Pythonの非常に便利な2つのデコレーターを解説
-
Pythonコンテナのための組み込み汎用関数操作
-
Python カメの描画コマンドとその例
-
Pythonショートビデオクローラーチュートリアル
-
[解決済み] データ型が理解できない
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み] どうすれば、文字列中のリテラルな中抜き文字を印刷し、また.formatを使用することができるのでしょうか?
-
[解決済み] 10進数のrange()ステップ値を使用するには?
-
[解決済み] Pythonで無限大の数を表現するにはどうしたらいいですか?
-
[解決済み] getattr()とは何ですか、どのように使うのですか?
最新
-
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の画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?