python模型的属性是什么_python – Django:为什么Django模型字段的类属性?
不,原因與此相同:
>>> class Foo(object):
... bar = 'Foo attribute'
...
>>> f = Foo()
>>> f.bar
'Foo attribute'
>>> Foo.bar
'Foo attribute'
>>> f.bar = 'instance attribute'
>>> f.bar
'instance attribute'
>>> Foo.bar
'Foo attribute'
當您將屬性分配給對象時,該對象的同名的類屬性將被“黯然失色”.然而,在屬性查找中,如果所討論的對象沒有定義所述屬性,則將返回類1.
在Django中,ORM層使用這些類屬性來生成轉換為SQL查詢和操作的機制(深層次的元類魔術在幕后).
編輯:回答你的問題 –
要理解,您需要了解一些關于Python的data model.基本上,類和對象都有命名空間.如果你偷看他們的特殊__dict__屬性,這是很明顯的:
>>> print Foo.__dict__
{'__dict__': , '__weakref__':
'__weakref__' of 'Foo' objects>, '__module__': '__main__', 'bar': 'Foo attribute
', '__doc__': None}
>>> f = Foo()
>>> print f.__dict__
{}
當對象f首次創建時,它有一個空的命名空間.當你做一個查找,f.bar,這個命名空間(真的,一個字典)被查找.由于沒有發現’bar’屬性,所以f的類Foo被查找.我們在那里找到’bar’:’Foo屬性’.所以這將是什么回報:
>>> f.bar
'Foo attribute'
現在,當您為某個對象分配屬性值,并且該屬性名稱在其命名空間中尚不存在時,將創建它:
>>> f.bar = 'instance attribute'
>>> print f.__dict__
{'bar': 'instance attribute'}
>>> f.bar
'instance attribute'
現在,你知道下一次f.bar是怎么回事! f .__ dict __ [‘bar’]存在,并在我們再看Foo的命名空間之前返回.
當然,如果您的意圖是始終訪問和操作類的屬性而不是實例,則需要使用類的名稱.
>>> Foo.bar
'Foo attribute'
>>> Foo.__dict__['bar']
'Foo attribute'
總結
以上是生活随笔為你收集整理的python模型的属性是什么_python – Django:为什么Django模型字段的类属性?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 启动盘Linux windows,Lin
- 下一篇: js十秒没有点击怎么判断_MAC口红怎么