Когда люди спрашивают, могут ли сайты ASP.NET обработать высокий трафик, я часто отсылаю их к plentyoffish.com. Сайт имеет крупный трафик и работает на горстке серверов. Это известно тем, что воздействовало в течение многих лет на два сервера---один для подавания изображений и один для обработки всего остального.
Обратите внимание, что экземпляр объекта
не имеет атрибута __ dict __
:
>>> dir(object())
['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__']
Пример для иллюстрации этого поведения в производном классе:
>>> class Foo(object):
... __slots__ = {}
...
>>> f = Foo()
>>> f.bar = 42
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Foo' object has no attribute 'bar'
Цитирование из документации по слотам
:
[...] Объявление
__ slots __
принимает последовательность переменных экземпляра и резервирует ровно столько места в каждом экземпляре, чтобы хранить значение для каждой переменной. Место сохраняется, потому что__ dict __
не создается для каждого экземпляра.
РЕДАКТИРОВАТЬ: Чтобы ответить ThomasH из комментариев, тестовый класс OP является классом «старого стиля». Попробуйте:
>>> class test: pass
...
>>> getattr(test(), '__dict__')
{}
>>> getattr(object(), '__dict__')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute '__dict__'
, и вы заметите, что есть экземпляр __ dict __
. В классе объектов может не быть определено __ slots __
, но результат тот же: отсутствие __ dict __
, что препятствует динамическому назначению атрибута. Я реорганизовал свой ответ, чтобы сделать его более ясным (переместите второй абзац вверх).
Хороший вопрос, я предполагаю, что он связан с тем фактом, что объект
является встроенным / расширенным типом .
>>> class test(object):
... pass
...
>>> test.test = 1
>>> object.test = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't set attributes of built-in/extension type 'object'
IIRC, это имеет связано с наличием атрибута __ dict __
или, вернее, с setattr ()
, срабатывающим, когда объект не имеет атрибута __ dict __
.