2016-09-24 62 views
1

所以我正在用Python編寫一個程序,它將把我所有的大學課程(來自csv)以及有關它們的打印信息。我寫了一個簡單的課Subject來更好地管理一切。在我的單身中,甚至幾周,幾周和每週都有課,我有講課,練習和實驗室。所以我的主題類是這樣的:Python類初始化 - 屬性內存

class Subject: 
    number = 0 
    name = "" 
    dummyData = [] 
    even = {} 
    odd = {} 
    all = {} 
    type = "" 
    def __init__(self, name, number, type): 
     self.name = name 
     self.number = number 
     self.type = type 
     self.info = str(number) + " " + name + " " + type 

以前我曾寫在even所有日子,oddall類型的字典,像這樣:

even = {"mon":"", 
       "tue":"", 
       "wed":"", 
       "thu":"", 
       "fri":"", 
     } 

所以我所有的課小時內添加到特定一天的鑰匙。但是有一個問題。例如,可以說編程講座是主題1,編程實驗室是主題2.主題1是在週一的9.15。對象2也在星期一,但是在17.05。所以我有一個功能,它可以檢查主題是偶數/星期還是每週。然後我會在主題1上分配f.e 9.15到even["mon"]。然後我會去找主題2,並嘗試將17.05加到even["mon"]。每個主題都是存儲在列表中的其他Subject類對象。但是有一個錯誤。當我試圖添加17.05到主題2s even["mon"]它添加它,好吧,但even["mon"]="17.05",但它是="9.15/17.05"。我試圖找出什麼是錯的,我終於做到了,從改變我的等級:

class Subject: 
    number = 0 
    name = "" 
    dummyData = [] 
    even = {"mon":"", 
       "tue":"", 
       "wed":"", 
       "thu":"", 
       "fri":"", 
     } 
    ...etc... 
    type = "" 
    def __init__(self, name, number, type): 
     self.name = name 
     self.number = number 
     self.type = type 
     self.info = str(number) + " " + name + " " + type 

到:

class Subject: 
    number = 0 
    name = "" 
    dummyData = [] 
    even = {} 
    odd = {} 
    all = {} 
    type = "" 
    def __init__(self, name, number, type): 
     self.name = name 
     self.number = number 
     self.type = type 
     self.info = str(number) + " " + name + " " + type 
     self.even = {"mon":"", 
       "tue":"", 
       "wed":"", 
       "thu":"", 
       "fri":"", 
     } 

+奇數和所有。那麼爲什麼Python像記住寫入第一個對象屬性的東西呢?

回答

0

您需要聲明__init__方法中的屬性。下面是一個示例

class Subject: 
    def __init__(self, name, number, type): 
     self.number = number 
     self.name = name 
     self.dummyData = [] 
     self.even = {} 
     self.odd = {} 
     self.all = {} 
     self.type = type 

聲明類聲明中的變量使它們成爲「類」成員而不是實例成員。在__init__方法中聲明它們可確保每次創建對象的新實例時都會創建一個新的成員實例。

+0

因此,在init方法之上創建屬性是一種不好的做法嗎? – FrynioS

+0

是的,您不需要那樣做,除非您希望這些變量在課程的所有實例中共享。 – user3543300

+0

謝謝,現在我很清楚 – FrynioS