Discuss / Python / 疑问,大神帮忙解答下

疑问,大神帮忙解答下

Topic source

下面在创建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))? 不知道描述清楚没,看明白的一起讨论下,没有看明白的把疑问提出来讨论。 跪谢!

不删除好像没什么影响 作者处女座、有强迫症而已。 既然这些key已经被包含到['fields']里面去了。。。 。。。

刚接触,元类这他费劲。

这个地方有个坑,刚爬出来... ...

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

Reply