関数の実装を動的に割り当てたい。
次から始めましょう。
class Doer(object):
def __init__(self):
self.name = "Bob"
def doSomething(self):
print "%s got it done" % self.name
def doItBetter(self):
print "Done better"
他の言語では、doItBetter を匿名関数にして、オブジェクトに割り当てます。ただし、Python では無名関数はサポートされていません。代わりに、呼び出し可能なクラス インスタンスを作成して、それをクラスに割り当てます。
class Doer(object):
def __init__(self):
self.name = "Bob"
class DoItBetter(object):
def __call__(self):
print "%s got it done better" % self.name
Doer.doSomething = DoItBetter()
doer = Doer()
doer.doSomething()
それは私にこれを与えます:
トレースバック (最新の最後の呼び出し): 13 行目、doer.doSomething() の 9 行目、call print "%s got it done better" % self.name AttributeError: 'DoItBetter' object has no attribute 'name'
最後に、callable をオブジェクト インスタンスに属性として割り当てて呼び出してみました。
class Doer(object):
def __init__(self):
self.name = "Bob"
class DoItBetter(object):
def __call__(self):
print "%s got it done better" % self.name
doer = Doer()
doer.doSomething = DoItBetter()
doer.doSomething()
これは、DoItBetter で self を参照しない限り機能しますが、所有している class ではなくself.name
callable を参照しているため、名前エラーが発生します。self
self
だから私は匿名関数をクラス関数またはインスタンスメソッドに割り当てるPythonicの方法を探していますself
.