[英]Django models & Python class attributes
django網站上的教程顯示了這些模型的代碼:
from django.db import models
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
votes = models.IntegerField()
現在,每個屬性,都是一個類屬性,對吧? 因此,所有類的實例都應該共享相同的屬性。 稍后,他們提出了這段代碼:
class Poll(models.Model):
# ...
def __unicode__(self):
return self.question
class Choice(models.Model):
# ...
def __unicode__(self):
return self.choice
他們是如何從類屬性轉變為實例屬性的? 我的課程屬性錯了嗎?
看看django / db / models.py下的Model
類。 在那里,類屬性通過類似的東西轉向實例屬性
setattr(self, field.attname, val)
有人可能會推薦整個文件( ModelBase
和Model
類)作為元類的優秀動手示例。
這是用元類完成的 - 非常聰明的東西。 如果你想了解更多,我會推薦Marty Alchin的優秀書籍Pro Django。
在Python中,類屬性始終也是實例屬性:
class C(object):
a = 1
def show_a(self):
print self.a # <- works
但是在django中,由於Model類有特殊的元類,所以要進一步復雜化,所以要小心你的假設!
類實例具有作為字典實現的名稱空間,該字典是搜索屬性引用的第一個位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.