Комментарии 20
Вау. Давно статей такого уровня по питону небыло на хабре. Welcome!
«Спасибо за ваше время»
Спасибо за ваши знания — которыми делитесь.
Спасибо за ваши знания — которыми делитесь.
+ линк на Python Data Model.
А ещё было бы очень интересно узнать о изменениях в протоколе атрибутов в Python 3 в сравнении с Python 2.6
А ещё было бы очень интересно узнать о изменениях в протоколе атрибутов в Python 3 в сравнении с Python 2.6
>>Экземпляр некоторого класса A — это объект, у которого в атрибуте __bases__ есть ссылка на класс A.
С этой фразой не согласен, или я чего-то не понимаю.
Если у объекта в __bases__ ссылка на класс А — то это класс-наследник класса А
Экземпляр класса А хранит ссылку на класс А в атрибуте __class__
С этой фразой не согласен, или я чего-то не понимаю.
Если у объекта в __bases__ ссылка на класс А — то это класс-наследник класса А
Экземпляр класса А хранит ссылку на класс А в атрибуте __class__
Очень крутая статья, надо будет ее еще раз перечитать попозже. Хочется отметить отличное заключение автора, потому что python достаточно прост и понятен, а подобные «усложняющие» плюшки ни сколько не сказываются на доступности и красоте языка.
И ни слова про mro!?
Надо было просто упомянуть )
Интересно! Спасибо за статью.
Да, прекрасная статья! Вот бы её года четыре назад… :-)
Повторение — мать учения! Спасибо!
Повторение — мать учения! Спасибо!
property може работать как декоратор, и тогда он определяет дескриптор не-данных.
class Foo(object):
@property
def getter_only(self):
pass
Не могу с вами согласиться. Если развить этот пример:
если бы getter_only был дескриптором не данных, значение записалось бы в __dict__ экземпляра
Foo.__dict__["getter_only"].__get__ # <method-wrapper '__get__' of property object at 0x21dd5d0>
Foo.__dict__["getter_only"].__set__ # <method-wrapper '__set__' of property object at 0x21dd5d0>
f = Foo()
f.getter_only = 1 # AttributeError
если бы getter_only был дескриптором не данных, значение записалось бы в __dict__ экземпляра
И property, и classmethod, и staticmethod могут быть декораторами. Честно говоря, всегда применял их как декораторы…
"""«Чтобы установить значение value атрибута attrname экземпляра a»""
А я вот как-то натыкался на ситуацию, когда установка атрибута приводила к AttributeError.
А я вот как-то натыкался на ситуацию, когда установка атрибута приводила к AttributeError.
В голову сходу приходят три сценария, которые могли бы к этому привести:
1. Использование __slots__ может привести к такой ошибке, при попытке установить атрибут с именем, не перечисленным в __slots__
2. Использование __setattr__, в нём явный raise AttributeError()
3. Использование дескриптора данных, с raise AttributeError() в методе __set__
возможно, есть ещё варианты
1. Использование __slots__ может привести к такой ошибке, при попытке установить атрибут с именем, не перечисленным в __slots__
2. Использование __setattr__, в нём явный raise AttributeError()
3. Использование дескриптора данных, с raise AttributeError() в методе __set__
возможно, есть ещё варианты
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Пользовательские атрибуты в Python