Можно ли в ответ передать значение состояния / реквизита от одного компонента другому

Короткий ответ: нет способа добавления настраиваемых атрибутов к связанным методам.

Дальнейший ответ следует.

В Python есть объекты функции и объектов . Когда вы определяете класс, оператор def создает объект функции функции , который живет в пространстве имен класса:

>>> class c:
...     def m(self):
...         pass
...
>>> c.m

Объекты функции имеют специальный атрибут __dict__, который может содержать пользовательские атрибуты:

>>> c.m.i = 0
>>> c.m.__dict__
{'i': 0}

Объектами метода являются разные звери. Это крошечные объекты, содержащие ссылку на соответствующий объект функции (__func__) и один на свой объект-хост (__self__):

>>> c().m
>
>>> c().m.__self__
<__main__.c object at 0x02625070>
>>> c().m.__func__

>>> c().m.__func__ is c.m
True

Объекты метода предоставляют специальный __getattr__, который пересылает атрибут доступа к объекту функции:

>>> c().m.i
0

Это также относится к свойству __dict__:

>>> c().m.__dict__['a'] = 42
>>> c.m.a
42
>>> c().m.__dict__ is c.m.__dict__
True

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

Это похоже на пользовательские классы, определяющие слоты __slots__ и no __dict__ при попытке установить несуществующий слот поднимает значение AttributeError (дополнительную информацию см. в документах __slots__ ):

>>> class c:
...     __slots__ = ('a', 'b')
...
>>> x = c()
>>> x.a = 1
>>> x.b = 2
>>> x.c = 3
Traceback (most recent call last):
  File "", line 1, in 
AttributeError: 'c' object has no attribute 'c'

0
задан rrd 18 March 2019 в 12:12
поделиться