Почему записывается неинформационный дескриптор с атрибутом hijack метода __delete__? [Дубликат]

"этот класс не является ключевым значением, совместимым с кодировкой для ключа. Я знаю его немного поздно, но мой ответ отличается, поэтому я думаю, что он должен быть опубликован. Я неправильно нажимал второй контроллер. Вот пример

Неправильный способ нажатия контроллера

UIViewController* controller = [[UIViewController
 alloc]initWithNibName:@"TempViewController" bundle:nil];
         [self.navigationController pushViewController:controller animated:true];

Правильный путь

TempViewController* controller = [[TempViewController
 alloc]initWithNibName:@"TempViewController" bundle:nil];
         [self.navigationController pushViewController:controller animated:true];

Я не нашел ответа, как указано выше, так что может быть, это может помочь кому-то с той же проблемой

3
задан oyjh 19 May 2015 в 01:55
поделиться

1 ответ

Вторая цитата верна. Вторая цитата взята из справочника языка языка Python (хотя вы указали неверную ссылку), а ссылка на язык считается более авторитетной, чем руководство по использованию. Кроме того, он соответствует фактическому поведению; макрос PyDescr_IsData , который вы нашли, является фактической программой , используемой в object.__getattribute__ , чтобы определить, что считается дескриптором данных, а - __set__ или __delete__ приведет к тому, что tp_descr_set будет непустым.

Ссылка на язык также объясняет, почему Set не отменяет экземпляр dict для a.b:

Если он не определяет __get__(), то доступ к атрибуту будет возвращать сам объект дескриптора, если в словаре экземпляра объекта нет значения. [...] Дескрипторы данных с __set__() и __get__(), определенными, всегда переопределяют переопределение в словаре экземпляра.

Определение либо __set__, либо __delete__ будет устанавливать тип tp_descr_set и создавать экземпляры дескрипторов данных типа. Дескриптор данных всегда будет вызываться для попыток установить или удалить атрибут, которым он управляет, даже если есть запись в типе экземпляра с тем же именем, и даже если он имеет только __set__, и вы пытаетесь удалить атрибут или наоборот. (Если у него нет необходимого метода, он вызовет исключение.) Если в дескрипторе данных также есть __get__, он также будет перехватывать попытки получить атрибут; в противном случае Python отпадет от обычного поведения поиска атрибутов, как если бы он вообще не был дескриптором.

5
ответ дан user2357112 21 August 2018 в 16:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: