疑问,大神帮忙解答下
Topic source这个地方有个坑,刚爬出来... ...
attrs[k]里面保存的是类属性,按说后面赋值时,会拿实例属性会覆盖掉它,但是...并没有!
类属性(比如name)的引用是 u.name, 有没有?
Model是dict的子类,有没有?
在实例被赋值(name='test'...)、进行init初始化之后,'test'值还是保存在u.['name']中,没有再赋值给u.name, 有没有?
getValue或者getValueOrDefault时,是直接getattr(self, 'name', None) 有没有?
结果类属性里面有这个name,所以直接返回表属性的值,结果报错,有没有?
而当attrs.pop(k)之后,一切就清静了...
getattr(self, 'name', None)是不能直接找到u.name的值,
所以调用getattr(self, 'name')方法,
然后你让它返回的是self['name']....
- 1
用户5963807916
下面在创建orm里,创建元类ModelMetaclass中的一段代码
if not primaryKey: raise RuntimeError('Primary key not found.') for k in mappings.keys(): attrs.pop(k) escaped_fields = list(map(lambda f: '
%s
' % f, fields))求问:为什么要删除attrs的key(attrs.pop(k))? 不知道描述清楚没,看明白的一起讨论下,没有看明白的把疑问提出来讨论。 跪谢!