все!У меня большая проблема с моим кодом.Я пытаюсь написать простой код как простую структуру для понимания метапрограммирования.И у меня следующая проблема.
doc1 = Document()
doc1.id = 20
doc2 = Document()
print (doc2.id) # show 20, but it's wrong!!! It should be 0
Это мой список кодов
class BaseModel(type):
def __new__(cls, name, bases, attrs, **kwargs):
instance = super().__new__
parents = [b for b in bases if isinstance(b, BaseModel)]
if not parents:
return instance(cls, name, bases, attrs)
module_ = attrs.pop('__module__')
attrs_ = {'__module__': module_}
classcell_ = attrs.pop('__classcell__', None)
if classcell_ is not None:
attrs_['__classcell__'] = classcell_
for key, value in attrs.items():
if not isinstance(value, Field):
continue
print (value.__dict__)
attrs_[key] = value
instance = instance(cls, name, bases, attrs_, **kwargs)
return instance
class Model(metaclass=BaseModel):
pass
class Field:
def __init__(self, value=0):
self._value = value
def __get__(self, instance, owner):
return self._value
def __set__(self, instance, value):
self._value = value
class Document(Model):
id = Field()
Что происходит?Я думаю, что основной проблемой является новый метод в метаклассе.Я прав?Как это исправить?