2015-11-04 91 views
0

我知道當我定義一個類時,我需要包含self和init,但是有人可以幫助我如何定義具有默認值的類嗎?使用默認值定義類

例如:

class Student1(): 
    def __init__(self, college='University', gpa=3.2, credits=45): 
     ... 

class Student2(): 
    def __init__(self, college='Community College', gpa=3.8, credits=51): 
     ... 

我希望能夠有Student1.college有「大學」的全球價值,Student2.college有「社區學院」,STUDENT2的全球價值。 gpa的全球價值爲3.8,Student1.gpa的全球價值爲3.2,因此當我在代碼中使用它們時,它們具有我給予他們的價值。

在此先感謝!

編輯::

class Student(): 
    def __init__(self, college, gpa, credits) 
     self.college=college 
     self.gpa=gpa 
     self.credits=credits 
Student1=Student("university", 3.2, 45) 
Student2=Student("community college", 3.8, 51) 
    def work(self, job='work study') 
     self.job=job 

所以,當我在Python Shell中鍵入Student1.college它會返回 「大學」。

我想讓學生1和學生2都有「工作」的工作學習,但是當我在shell中鍵入self.job時,它說「名稱:錯誤名稱」自我未定義「爲什麼?

+2

我不知道爲什麼這些是單獨的類而不是兩個不同的同一類的實例嗎?你能詳細說明嗎?此外,「全球價值」是什麼意思? –

+0

@ChadS。基本上我只需要幫助開始我的代碼。稍後在定義的類中,我希望能夠添加到它們中。例如,假設Student1需要一個價值3個學分的課程,我只想簡單地通過Student1.credits + 3來更新它,以便將原來的45個學分更新爲48個。如果這樣做是有道理的。 –

+2

我會建議製作一個學生課程,其課程屬性是CourseTranscript實例列表,其中每個CourseTranscript都有一個成績和一個學分屬性。然後,學生的「學分」和「Gpa」只需從這些CourseTranscripts中計算出來。 –

回答

1

您的代碼有幾個小問題。首先,您需要在創建student1student2之前完成定義您的課程。在python中,當你解壓縮時,你告訴解釋器你已經到達了塊的末尾(即一個函數,一個類,一個循環或者其他一些代碼塊)。如果您希望work成爲您班級的一種方法,則需要將其作爲Student的班級塊的一部分。

其次,afaict,您只有在work中設置了job屬性,但您永遠不會撥打work。在init中將每個屬性設置爲某個默認值通常是一個好主意,但不是必需的。

第三,似乎你錯過了一些:並且至少有一個縮進錯誤。嘗試這樣的事情:

class Student(): 
    def __init__(self, college, gpa, credits): 
     self.college = college 
     self.gpa = gpa 
     self.credits = credits 
     self.job = "no job" 

    def setWork(self, job='work study'): 
     self.job = job 

student1 = Student("university", 3.2, 45) 
student1.setWork() 
student2 = Student("community college", 3.8, 51) 
student2.setWork("Starbucks") 

print student1.job 
# work study 
print student2.job 
# Starbucks