Как дела? C# введите события " on_<property-name>" и bind() - в pyton
Я исхожу из " C " /unix фона и изучаю Python. Фреймворк kivy - для python - реализует замечательную событийно - ориентированную архитектуру, которую я хотел бы воспроизвести в своем собственном приложении, но я не использую Kivy по причинам, которые я буду избегать документировать здесь ради простоты dicsussion.
На kivy можно наблюдать изменения в свойстве (наборе), используя 'on_<property-name>'. Свойство on_<property-name> вызывается через иерархию при изменении значения свойства. Если вы сами определяете класс:
from kivy import Widget class MyClass(Widget): # I guess we need to start with EventDispatcher?? my_property = NumericProperty(1) # NumbericProperty is a kivy class # This method can be overriden by base clases of this class def on_my_property(self, instance, value): # Note that 'on_<property-name>' must not forget to call # the superclass function 'on_<property>' also , # but I do not know how to do this? super(MyClass, self).on.... ?? print('My property a changed to', value)
Как мне воспроизвести эту архитектуру?
Я посмотрел на этот исходный файл Kivy для класса свойств https://github.com/kivy/kivy/blob/master/kivy/properties.pyx#L219 но там происходит гораздо больше, чем мне нужно, и мне трудно понять код. Я не вижу, как и где определяется метод/функция/событие "On_<property-name>" (независимо от того, как он называется), чтобы я мог переопределить его в MyClass
Поэтому в моем дизайне я хочу, чтобы корневой класс был:
class MyProperty(object): # Is object correct? # I have no idea what to subclass from ? # or how to provide the on_<property-name> event?
Так что я могу подкласс:
class MyModel(EventDispatcher): # Is this right??? # declare property called "data" data=MyProperty(...) # not sure what to do here? class MySubModel(MyModel): # Is Object right??? # override super class MyModel's on_data event to react to changes to "data" def on_data(): # some action code
Но я понятия не имею, как реализовать это свойство on_<, чтобы суперкласс вызывался соответствующим образом и свойство on_< могло быть переопределено подклассами, которые я определяю.
Помогите , пожалуйста, и не забудьте дать самое важное объяснение. Пожалуйста, пожалуйста, не связывайте меня с google, потому что ясно, что я дошел до того, что погуглил и посмотрел сайты и страницы, и пришел сюда за помощью. И, пожалуйста, не предлагайте другого решения, потому что я потратил на это так много времени, что теперь я должен понять и реализовать те же самые шаблоны проектирования для здравомыслия !! Спасибо
Что я уже пробовал:
kivy/properties.pyx at master · kivy/kivy · GitHub[^]