私はtraits
presentation from PyCon 2010で作業しています。約2:30:45で、発表者はをカバーし始めます。trait
が変更されたときはいつでもサブルーチンを自動的に呼び出すことができます。Traits静的イベント通知をリストに表示するにはどうすればよいですか?
私はvolume
またはinputs
に変更するたびに静的イベントを発生させることができるかどうかを確認しようとしています。
from traits.api import HasTraits, Range, List, Float
import traits
class Amplifier(HasTraits):
"""
Define an Amplifier (a la Spinal Tap) with Enthought's traits. Use traits
to enforce values boundaries on the Amplifier's objects. Use events to
notify via the console when the volume trait is changed and when new volume
traits are added to inputs.
"""
volume = Range(value=5.0, trait=Float, low=0.0, high=11.0)
inputs = List(volume) # I want to fire a static trait event notification
# when another volume element is added
def __init__(self, volume=5.0):
super(Amplifier, self).__init__()
self.volume = volume
self.inputs.append(volume)
def _volume_changed(self, old, new):
# static event listener for self.volume
if not (new in self.inputs):
self.inputs.append(self.volume)
if new == 11.0:
print "This one goes to eleven... so far, we have seen", self.inputs
def _inputs_changed(self, old, new):
# static event listener for self.inputs
print "Check it out!!"
if __name__=='__main__':
spinal_tap = Amplifier()
spinal_tap.volume = 11.0
print "DIRECTLY adding a new volume input..."
spinal_tap.inputs.append(4.0)
try:
print "NEGATIVE Test... adding 12.0"
spinal_tap.inputs.append(12.0)
except traits.trait_errors.TraitError:
print "Test passed"
私はこのスクリプトを実行すると、私はので、私は、私はspinal_tap.volume
に11.0
を割り当てるとき_volume_changed()
が解雇されることを知って、コンソール出力にThis one goes to eleven... so far, we have seen [5.0, 11.0]
を見ることができます。
しかし、私は_inputs_changed()
からのイベントは見ません。どのような例で私が調理しても、私はList
イベントを発生させることができません。
これは私が見ている出力です... _inputs_changed()
が今までに発生するという証拠はないことに注意してください。
[[email protected] ~]$ python spinaltap.py
This one goes to eleven... so far, we have seen [5.0, 11.0]
DIRECTLY adding a new volume input...
NEGATIVE Test... adding 12.0
Test passed
[[email protected] ~]$
私は(すべてが、私は直接Enthought's siteオフeasy_install
traits
バージョン4.0.0を使用して)両方のpython2.6/Cygwinの/ Windows 7のとPython 2.5/Linuxでこれを実行しました。これまでに何を試しても、結果は同じです。
List
は、形質を使用するときに静的イベントを発生させることができますか?もしそうなら、私は何か間違っているのですか?
この情報をお寄せいただきありがとうございます。 –