Discuss / Python / 解释表述不对

解释表述不对

Topic source

在ModelMetaclass中,一共做了几件事情:

其中第二点说明:

实例的属性会遮盖类的同名属性

这就句话说得不对,因为Model继承了dict,属于类字典,同样User也是类字典。因为初始化User对象时,其实就是初始化一个字典,但存在类属性名与 字典中的键 重名的情况,这样u.id 访问倒是IntegerField('id'),而不是所期望的u['id'],所以在元类中要删除id,name,email,password这些类属性,并通过

__getattr__()

的定制方法,使其u.id 等价于 u.['id']

上面最后一句话有笔误,不是“u.['id']”, 而是“u['id']”

John_啊呜

#3 Created at ... [Delete] [Delete and Lock User]

有道理!学习了!

yylpolar9527

#4 Created at ... [Delete] [Delete and Lock User]

解释得不错!!

yylpolar9527

#5 Created at ... [Delete] [Delete and Lock User]
class Model(dict):
    def __init__(self, **kw):
        super(Model, self).__init__(**kw)

class User(Model):
    id = 'class attr'

>>> u.id
'class attr'
>>> u['id']
12345
>>>

yylpolar9527

#6 Created at ... [Delete] [Delete and Lock User]
class Model(dict):
    def __init__(self, **kw):
        super(Model, self).__init__(**kw)

class User(Model):
    id = 'class attr'

>>> u = User(id=12345)
>>> u.id
'class attr'
>>> u['id']
12345
>>>

  • 1

Reply