Этот метод вызывается при присваивании значения некоторому атрибуту.В отличие от __getattr__(),метод всегда вызывается,а 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Этот метод вызывается при присваивании значения некоторому атрибуту.В отличие от __getattr__(),метод всегда вызывается,а

Поиск

__delattr__(self, name)


Этот метод объекта вызывается в том случае,если атрибут не найден другим способом(его нет в данном экземпляре или в дереве классов).Здесьname -имя атрибута.Метод должен вычислить значение атрибута либо возбудить исключение AttributeError.Для

получения полного контроля над атрибутами в"новых"классах(то есть потомках object)используйте метод __getattribute__().

Этот метод вызывается при присваивании значения некоторому атрибуту.В отличие от __getattr__(),метод всегда вызывается,а

 

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

 

присваивания значений атрибутов предпочтительнее присваивать словарю __dict__: self.__dict__[name] = value или(для"новых"

 

классов) -обращение к __setattr__() базового класса:object.__setattr__(self, name, value).

Как можно догадаться из названия,этот метод служит для удаления атрибута.


 

Следующий небольшой пример демонстрирует все перечисленные моменты.В этом примере из словаря создается объект,именами атрибутов которого будут ключи словаря,а значениями-значения из словаря по заданным ключам:

 

class AttDict(object):

 

def __init__(self, dict=None): object.__setattr__(self, '_selfdict', dict or {})

 

def __getattr__(self, name):

 

if self._selfdict.has_key(name): return self._selfdict[name]

else:



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 54; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.008 с.)