オブジェクトのスコープ内の属性にアクセスするオブジェクトに関数を渡すにはどうすればよいですか?Python関数リファレンスオブジェクトの属性
class Foo():
def __init__(self, some_func):
self.some_func = some_func
self.stats = 'some stats'
def execute(self):
return self.some_func()
def bar():
return x.stats
x = Foo(bar)
x.execute()
が、私は、私は、オブジェクトの名前を変更する場合、新しいbar
を記述する必要があること嫌い:
これは動作します。私は実際に書きたい何
は、より多くのようなものです:
class Foo():
def __init__(self, some_func):
self.some_func = some_func
self.stats = 'some stats'
def execute(self):
return self.some_func()
def bar():
return self.stats
x = Foo(bar)
x.execute()
とbar()
でself
は、任意のはFooから統計情報を拾うことは関係なく、それが命名だかの、のに渡され得るオブジェクトを持っています。私はこれを行うためのスマートな方法を理解することはできません。
Fooを変更せずにFooオブジェクトの属性を参照する良い方法はありますか?あるいは、Fooの電話番号some_func()
をよりスマートにすることでこれを有効にできますか?これは、Python 2と3の間で異なりますか?
これらのアプローチのどちらもNameErrorをスローしませんか? –
「呼び出し側」パラメータを 'bar'に追加してみませんか?基本的には「自己」が通常行うことと同じことです。 def bar(caller):return caller.stats' def execute(self):return self.some_func(self) ' – 0x5453
いいえ。最初の例'x.stats'は' __init__'で 'some_func'を呼び出そうとしたとしても、書かれたように動作します。私はこのような呼び出しを行うコードを継承していると私はそれが小人だと思う。 – aknox