亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Python中循環(huán)導(dǎo)入和依賴錯(cuò)誤

劉福 / 2360人閱讀

摘要:類之間的循環(huán)依賴代碼大致是這樣的這樣,依賴,依賴,又會(huì)回到,這樣肯定就是錯(cuò)誤的了。因?yàn)樵谝玫臅r(shí)候,會(huì)回到查找引用的,但是這個(gè)時(shí)候的構(gòu)建還沒有完成,就會(huì)導(dǎo)入錯(cuò)誤。也就是使用字符串表示模塊,而不進(jìn)行導(dǎo)入了。

最近使用Python + Django,是一個(gè)巨復(fù)雜的系統(tǒng),才幾天就40多張數(shù)據(jù)庫的表了。因?yàn)樵贒jango里面,表都使用類來實(shí)現(xiàn)的,所以就要一開始寫很多的class,語法都沒問題,但是有時(shí)候就會(huì)出現(xiàn)ImportError Can not import name xxxx

這個(gè)問題遇見了兩次,稍微有點(diǎn)差別,現(xiàn)在記錄一下來。

1.類之間的循環(huán)依賴
代碼大致是這樣的

class Employee(models.Model):
    permission = models.ManyToManyField(Permission)
class Permission(models.Model):
    dealer = models.ForeiginKey(Dealer)
    name = models.CharField(max_length=20)
class Dealer(models.Model):
    employees = models.ManyToManyField(Employee)

這樣,Employee依賴Permission,Permission依賴Dealer,Dealer又會(huì)回到Employee,這樣肯定就是錯(cuò)誤的了。

2.不同模塊之間的
Service.model 模塊

from Appointment.models import Appointment

class Order(models.Model):
    appointment = models.ForeignKey(Appointment)

在Appointment.models里面

from Service.models import ServiceItem

這樣也會(huì)引用錯(cuò)誤,這個(gè)原因找了好長(zhǎng)時(shí)間。
因?yàn)镺rder在引用Appointment的時(shí)候,會(huì)回到Service.models 查找Appointment引用的ServiceItem,但是這個(gè)時(shí)候Order的構(gòu)建還沒有完成,就會(huì)導(dǎo)入錯(cuò)誤。這個(gè)和Python的機(jī)制有關(guān)系的。

3.解決辦法
今天又遇見這問題了,雖然找到了原因,但是不知道怎么去修改,因?yàn)楫吘箻I(yè)務(wù)邏輯在這,現(xiàn)在有stackoverflow上找到一個(gè)答案,真心好用。
也就是使用字符串表示模塊,而不進(jìn)行導(dǎo)入了。
http://stackoverflow.com/questions/4379042/django-circular-model-import-help

class Service(models.Model):
    appointment = models.ForeignKey("appointment.Appointment")

參考
http://www.douban.com/group/topic/43938606/
http://www.oschina.net/question/919901_88601
http://www.oschina.net/translate/top-10-mistakes-that-python-programmers-make

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/37320.html

相關(guān)文章

  • python解決mysql視圖導(dǎo)入導(dǎo)出依賴問題

    摘要:是可視化工具中最棒的,但是,在處理視圖的導(dǎo)入導(dǎo)出方面,它是按照視圖名稱的字母順序來處理的,若視圖存在依賴,在導(dǎo)入過程中就會(huì)報(bào)錯(cuò)。 navicat是mysql可視化工具中最棒的,但是,在處理視圖的導(dǎo)入導(dǎo)出方面,它是按照視圖名稱的字母順序來處理的,若視圖存在依賴,在導(dǎo)入過程中就會(huì)報(bào)錯(cuò)。這個(gè)問題一直困繞我,一度因?yàn)槲沂褂胐ocker來部署mysql而繞過了這個(gè)問題。最近不得不直面這個(gè)問題,因...

    Brenner 評(píng)論0 收藏0
  • FlaskWeb開發(fā)讀書筆記之jinja2模板

    摘要:注模板包含不存在此問題。在模板中,使用過濾器顯式地標(biāo)記一個(gè)字符串為安全的臨時(shí)地完全禁用自動(dòng)轉(zhuǎn)義系統(tǒng)。通過在聲明中直接添加或,當(dāng)前的上下文可以傳遞到模板,而且不會(huì)自動(dòng)禁用緩存。 官網(wǎng):http://jinja.pocoo.org/docs/dev/中文文檔:http://docs.jinkan.org/docs/j...當(dāng)前版本2.8 安裝:pip install Jinja2Flask...

    tangr206 評(píng)論0 收藏0
  • 獨(dú)家 | 6種讓Python程序變慢的壞習(xí)慣

    摘要:假設(shè)我們需要在程序中計(jì)算一些數(shù)字的平方根。此外如果我們需要在程序中多次使用平方根函數(shù),代碼將會(huì)更整潔。然而在這個(gè)虛構(gòu)的例子中,只有的年齡超過歲。然后檢查這三個(gè)人的年齡是否滿足第二個(gè)條件。 作者:?Christopher Tao翻譯:王可汗校對(duì):王雨桐本文約1800字,建議閱讀5分鐘本文...

    xcc3641 評(píng)論0 收藏0
  • python 循環(huán)導(dǎo)入

    摘要:記錄前段時(shí)間學(xué)習(xí)時(shí)遇到的循環(huán)導(dǎo)入問題何為循環(huán)導(dǎo)入栗子很簡(jiǎn)單現(xiàn)在有三個(gè)包中導(dǎo)入中導(dǎo)入中導(dǎo)入然后隨便以一個(gè)文件為入口執(zhí)行程序假如以作為程序入口大概就像下面這樣現(xiàn)在執(zhí)行就會(huì)報(bào)出導(dǎo)入錯(cuò)誤類似下面這個(gè)詳細(xì)介紹在核心編程中有介紹有時(shí)間可以看一下重點(diǎn)是 記錄前段時(shí)間學(xué)習(xí) Flask 時(shí)遇到的循環(huán)導(dǎo)入問題 何為循環(huán)導(dǎo)入? 栗子很簡(jiǎn)單, 現(xiàn)在有a.py, b.py, c.py 三個(gè)包, b.py 中導(dǎo)入...

    EsgynChina 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<