使用ではなく、使い方の基本を説明してくれる人を探しています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、@ChrisMorganご協力いただきありがとうございます。
自分の答えを説明できるようになったと思います!これには、私にとっての対象としての自己のより良い把握が必要でした。これは、属性などでタグ付けされるインスタンス名です。
クラスは町である可能性があります。
getattr
その名前を使って家を探すので、すぐに電話をかける準備ができています。家が見つからない場合は別の場所を考え出します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)