[解決済み] pythonでsetattr()を使用する
質問
を使う、使わないの基本的なことを説明してくれる人を探しています。
setattr()
.
私の問題は、あるクラスのメソッド/関数を使用してデータを返し、そのデータを別のメソッド/関数に入れようとしていることです。おそらくこの場合、よりシンプルなアプローチの方がずっと良いのでしょうが、私はクラスがどのように機能し、使用されるのかを理解しようとしているのです。この問題は
setattr()
ということで、かなりシンプルな使い方に挑戦してみました。
同じ問題とは言えないが、私は次のようなことをしていた。
Python The Hard Way, ex42
-その
while
のループを18-41行目で見てください。
を書いてみましたが
\__init__()
を使用し、さらに
getattr()
おそらくクラスの名前空間に何かが必要なのだろうと思い、その代わりとしたのですが、これは役に立たなかったようです。
#! /bin/python2.6
class HolyGrail(object):
def __init__(self):
self.start = 'start_at_init'
# function definition in question:
# TypeError: 'str' object is not callable
def run_it(self):
start = setattr(self, 'name', 'get_thing')
start = self.name
# Something wrong here?
value_returned = start() #I believe this == self.get_thing()
use_it(value_returned)
"""
# alternate function definitions
# NameError: global name 'start' is not defined
def __init__(self):
self.start = 'get_thing'
def run_it(self):
go_do_it = getattr(self, start)
first_output = go_do_it()
use_it(first_output)
"""
def get_thing(self):
return "The Knights Who Say ... Ni!"
def use_it(self, x):
print x
print "We want a shrubbery!"
my_instance = HolyGrail()
my_instance.run_it()
Karl Knechtelさん、Amberさん、Chris Morganさん、ご協力ありがとうございました。
自分の答えを説明できるようになった!?これは、私にとってオブジェクトとしての自己をよりよく把握する必要がありました。 インスタンス名で、属性などのタグをつけるのです。
クラスはタウンでもいいし、それから。
getattr
すぐに呼び出せるように、その名前を使って家を探し、家が見つからなかったら別の場所を思いつく。
--With
getattr
名前」が存在し、それを探しに行く。ある機能から別の機能へのステップをダイナミックにする
ボーナスとして、デフォルトの値を設定することができます。
setattr
は家を建てて、後で呼び出せるように名前をつけます。
この家を建て直すこともできるし、見つからなかったら特定の場所に行くこともできる可能性があります。
--
setattr
属性名をつけ、その値を与える、または変更し、後で呼び出す。
ユーザーがサウンドをオフにした場合、以降のメソッドは音声を出力しないようにすることができます。
この関数はいろいろな書き方ができるけど、属性を変える必要はないんだ。
def run_it(self):
yo = getattr(self, 'get_thing')
answer = yo()
setattr(self, 'deal_accepted', self.use_it) #really ott
no = getattr(self, 'deal_accepted')
no(answer)
正しく修正されたコード。
def run_it(self):
value_returned = self.get_thing()
self.use_it(value_returned)
解決方法は?
を設定しています。
self.name
を
文字列
"get_thing"
ではなく、関数
get_thing
.
もし、あなたが
self.name
を関数にする場合は、1 に設定する必要があります。
setattr(self, 'name', self.get_thing)
しかし、他のコードでは直接呼び出せばよいので、これは全く不要です。
value_returned = self.get_thing()
関連
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] 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を使ったオフィス自動化コード例
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み] データ型が理解できない
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない