У меня есть класс вроде:
class A:
def __init__(self):
self.data = {}
и в какой-то момент я хочу запретить модификацию полей self.data
.
Я читал в уведомлении об отказе PEP-416, что есть много способов сделать это. Поэтому я хотел бы найти то, что они есть.
Я пробовал это:
a = A()
a.data = types.MappingProxyType(a.data)
Это должно работать, но сначала, его python3.3 +, а во-вторых, когда я делаю это "запрещение" несколько раз, я получаю следующее:
>>> a.data = types.MappingProxyType(a.data)
>>> a.data = types.MappingProxyType(a.data)
>>> a.data
mappingproxy(mappingproxy({}))
хотя было бы гораздо лучше получить только mappingproxy({})
, поскольку я собираюсь "запрещать" много раз. Проверка isinstance(MappingProxyType)
- это вариант, но я думаю, что могут существовать другие варианты.
Спасибо