После собственного дескриптора атрибут отсутствует в __dict__
Я хотел бы добавить к атрибутам объекта в Python некоторую информацию. Позже я хотел бы сохранить эти данные в БД, поэтому было бы неплохо узнать их формат в таблицах. Я думаю, что решение от SQLAlchemy хорошее, и я хотел бы сделать это так.
Сначала краткий пример:
class MyAttribute(object):
def __init__(self, AttrType):
self.val = None
self.AttrType = AttrType
def __get__(self, obj, objtype):
return self.val
def __set__(self, obj, val):
self.val = val
class MyClass(object):
Attr1 = MyAttribute('int(11)')
def __init__(self):
self.Attr1 = 44
self.Attr2 = 55
x = MyClass()
print("Attr1: %s"%x.Attr1)
print("Attr2: %s"%x.Attr2)
print(x.__dict__)
Результат этого сценария:
Attr1: 44
Attr2: 55
{'Attr2': 55}
Теперь моя проблема: в __dict__
, есть Attr2
, но нет Attr1
, Зачем? Как я могу добавить это? Какая функция отвечает за это? (Мое чтение __set__
, правильно?) Что мне нужно добавить, куда добавить объект атрибута к dict?
1 ответ
Решение
Пытаться MyClass.__dict__
:
>>> MyClass.__dict__['Attr1']
<__main__.MyAttribute object at 0x000000000296A5F8>
Дескрипторы хранятся в объекте класса, а не в объекте экземпляра. Вы на самом деле в беде здесь, по этой причине:
>>> x = MyClass()
>>> x.Attr1
44
>>> y = MyClass()
>>> y.Attr1 = 66
>>> y.Attr1
66
>>> x.Attr1
66 # uh oh
Задача MyAttribute - отслеживать, какие данные принадлежат какому экземпляру.