2015-10-25 4 views
0

Я часто нахожусь в такой ситуации:черты апи создания новой черты и черты изменили поведение

class A:... 

B=class 
    a=Instance(A,()) 
    @on_trait_change('a')##I would really like to be able to do this 
    def do_something(...) 

Я думаю, что это в настоящее время триггеры, если вы должны были сбросить полноту класса. например B = B(). b.a = A() должно вызвать его. Но я хотел бы контролировать, когда мой пользовательский класс сигнализирует, что он был «изменен». В любом случае вам может понравиться A, чтобы сигнал «изменился», если изменился только элемент A, например. b.a.x + = 1

ответ

2

Если оба A и B вытекают из HasTraits, затем изменить свой декоратор @on_trait_change('a.+') будет делать то, что вы хотите. Если вы измените подпись своего do_something на два или более аргумента, вы даже сможете определить, какие атрибуты a изменены. (См. http://traits.readthedocs.org/en/latest/traits_user_manual/notification.html#notification-handler-signatures.) .) .

+0

Да, я думаю, я должен согласиться на это ... Я не делаю в буквальном смысле то, что хочу, но – user3391229

+0

Похоже, что вы хотите вручную управлять событиями самостоятельно, которые, несомненно, позволяют вам делать. – aestrivex