亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

A類在B類中被使用,所以A類必須在文件中先被定義?有先后順序??

A類在B類中被使用,所以A類必須在文件中先被定義?有先后順序??

拉風的咖菲貓 2019-04-09 20:24:50
django中對數據庫增加額外的操作,有一種辦法是增加額外的manager方法是為模塊添加表級功能。比如下面這塊代碼段,我在models.py這個文件里面定義的:fromdjango.dbimportmodels#...AuthorandPublishermodelshere...classBookManager(models.Manager):deftitle_count(self,keyword):returnself.filter(title__icontains=keyword).count()classBook(models.Model):title=models.CharField(max_length=100)authors=models.ManyToManyField(Author)publisher=models.ForeignKey(Publisher)publication_date=models.DateField()num_pages=models.IntegerField(blank=True,null=True)objects=BookManager()def__unicode__(self):returnself.title但是,發現一個問題,如果我先定義了Book()這個模型,再定義BookManager()這個模型,會報"NameError:name'BookManager'isnotdefined",顯然是因為在Book類中使用了objects=BookManager()這個原因。而我印象中,似乎定義函數和類是沒有先后關系的;會在使用的時候自動查看是否聲明過。請大大幫指點下我這塊的知識盲點。謝謝!!馬年恭喜發財!
查看完整描述

2 回答

?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

python是解釋型語言,雖然會進行預編譯生成pyc文件,但主要是對庫引用等可重用部分進行一些處理,這塊不是很了解哈哈~你可以看看這里
簡單測試:
b_1=b()
classb:
pass
報錯
NameError:name'b'isnotdefined
So,類不會在編譯的時候提前聲明...在python里面要遵循解釋型語言的一些定義和處理原則。
解釋型語言我就知道javascript會對聲明型函數做預處理...但是也僅僅是對聲明式的函數定義做預處理,你是不是記混了?以下javascript的函數聲明做個參考~
//函數聲明式定義
functionfoo(num1,num2){
returnnum1+num2;
}
//函數表達式定義
varfoo=function(num1,num2){
returnnum1+num2;
};
//使用Function構造函數定義
varfoo=newFunction("num1","num2","returnnum1+num2");
//實際上創建一個Function實例并不一定要賦值給具體的指針,可以直接執行
(function(x,y){returnx+y})(1,2);
//之所以用圓括號把function(){}括起來是因為js解釋器會將function解釋為函數聲明,而函數聲明不能直接跟著(x,y),我們需要將其轉換為函數表達式。
//(1,2)表示要傳遞跟函數的參數。
//上面的例子也可以寫成:
functionfoo(x,y){
returnx+y;
}(1,2);
//函數聲明的方式無法定義匿名函數,因此如果想使用匿名函數,則必須用函數表達式的定義方式。
                            
查看完整回答
反對 回復 2019-04-09
?
森欄

TA貢獻1810條經驗 獲得超5個贊

寫類的函數時時需要的,因為在加載模塊時定義也可以認為是被執行的,執行到
objects=BookManager()
發現BookManager名字不存在就報錯了。
函數體或者類方法里面則沒有這個限制,因為會從這個模塊的globals()locals()里面來找名字,而加載時名字都已經放進去了
                            
查看完整回答
反對 回復 2019-04-09
  • 2 回答
  • 0 關注
  • 419 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號