2013-03-11 21 views
0

在下面的代碼,爲什麼會設置在課堂測試1的email_attachments列表「attach1」也設置在課堂test2將「attach1」的email_attachments名單?爲什麼設定一個Python 2.7列表跨階級界限

類別:

class classtest: 
    smtp_server = "" 
    smtp_port = 0 
    email_attachments = [] 

    def class_print(self): 

     print self.smtp_server 
     print self.smtp_port 
     print self.email_attachments 

腳本:

import ClassTest 

def main(): 
    test1 = ClassTest.classtest() 
    test1.smtp_server = "server1" 
    test1.smtp_port = "1" 
    test1.email_attachments.append("attach1") 
    test1.class_print() 

    print 

    test2 = ClassTest.classtest() 
    test2.smtp_server = "server2" 
    test2.class_print() 

main() 

結果:

server1的

[ 'attach1']

server2的

[「attach1」]

回答

3

你已經在類的頂部定義與類本身相關聯,而不是與類的特定實例的3個變量,所以它們的值在test1和test2之間共享。

如果你的目的是爲了有獨立值classtest類型的每一個對象,那麼你應該定義構造函數,並使用「自我」的前綴與每個變量:

def __init__(self): 
    self.smtp_server = "" 
    self.smtp_port = 0 
    self.email_attachments = [] 
相關問題