使用Python實現一個小型的航空訂票系統(3)

來源:互聯網
上載者:User

下面說一說其中碰到的問題,首先便是這裡剛開始搞不清楚是傳引用還是傳對象.(我不知道這樣說是否合理,但是按照c++的角度來看待我覺得會簡單一點),我在航空公司那個類中有關於航班的列表,那麼如果我把某個航班對象append到這個列表中時,如果以後那個航班對象發生了改變,那麼相應的公司列表中的那個會不會發生改變呢?同樣的疑問也出現在了航班對象中的seat列表以及customer的seat列表.後來簡單的實驗了一下,發現是會改變的,這就是傳引用.實際上在簡明python中這樣說到:

當你建立一個對象並給它賦一個變數的時候,這個變數僅僅 參考 那個對象,而不是表示這個對象本身!也就是說,變數名指向你電腦中儲存那個對象的記憶體。這被稱作名稱到對象的綁定

其實數組中存放的也是那個對象的地址,我想這和java中的是一樣的,除了基礎資料型別 (Elementary Data Type).比如:

a = 0

b = a

a =9

這個時候a為多少b為多少呢?b會不會隨著a的變化而變化呢?答案是不會

再如:

a = 'a'

b= a

a = 'b'

但是如果這樣寫:

class A:

     def __init__(self):

        self.name = ''

a = A()

b = a

a.name = "nihao"

print b.name

結果為nihao

這說明非基本類型都是傳的引用.再比如這樣一個程式,

fun(a):

    a = 0

a = 9

fun(a)

print a

答案還是9這說明python在這方面和java是一至的

第二個問題,是代碼結構問題,我將他抽象為下面這種形式:

class A:
    def __init__(self,mlist = []):
        self.mylist = mlist
class B:
    def __init__(self):
        self.P = None
    def setList(self,a):
        self.P = a
        a.mylist.append(self)

a1 = A()
a2 = A()

b1 = B()
b2 = B()

b1.setList(a1)
b2.setList(a1)

print a1.mylist
print a2.mylist

列印的結果會使我大吃一驚.....至今沒想通為什麼.........想看的話可以自己運行一下.......知道的一定要評論告訴我阿大神們!!!!!跪了!!!!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.