一、使用類和實例
我們先編寫一個學生的類,它存儲了有關學生的信息,還有一個整合學生信息的方法:
student.py
class Student(): def __init__(self,name,age): """初始化學生信息""" self.name = name self.age = age def get_desc(self): """得到學生的描述信息""" long_name = str(self.age) + ' ' + self.name return long_name stu1 = Student('joker',18) print(stu1.get_desc())
console:
解釋:__init__() 用於初始化實例的屬性,在get_desc() 中,使用了self.name 和 self.age 用戶訪問此實例中的屬性,用來打印學生的基本信息。
二、給屬性賦默認值以及修改屬性的值
類中的每個屬性都必須有初始值,就算它是0或者空字符串,那也必須要有。一般情況下我們使用__init__() 用於初始化,但如果有屬性
在__init__() 中已被賦與初始值,則在實例化對象時,無需包含為它提供初始值的形參。
student.py
1 class Student(): 2 3 def __init__(self,name): 4 """初始化學生信息""" 5 self.name = name 6 self.age = 0 7 8 def get_desc(self): 9 """得到學生的描述信息""" 10 long_name = str(self.age) + ' ' + self.name 11 return long_name 12 13 stu1 = Student('joker') 14 print(stu1.get_desc()) 15 stu1.age = 18 16 print(stu1.get_desc())
console:
解釋:
現在,在Python調用__init__() 來創建新實例時,只需要傳入姓名即可實例化對象,因為第六行代碼,給age 賦予了初始值,且init方法中也只需要除self外一個name形參,所以第一次打印的年齡為0,再看第15行代碼,我們用這種方式給age重新賦值18,所以第二次打印的年齡是18,所以,如果我們需要修改對象中的屬性可以使用這種方式,但卻不是最好的方式。
接下來使用第二種方式:用方法給屬性賦值:
student.py
1 class Student(): 2 3 def __init__(self,name): 4 """初始化學生信息""" 5 self.name = name 6 self.age = 0 7 8 def get_desc(self): 9 """得到學生的描述信息""" 10 long_name = str(self.age) + ' ' + self.name 11 return long_name 12 13 def update_age(self,new_age): 14 """用於更新學生的年齡""" 15 self.age = new_age 16 17 stu1 = Student('joker') 18 print(stu1.get_desc()) 19 stu1.update_age(19) 20 print(stu1.get_desc())
console:
解釋:
我們在類中,新增了一個用於更新學生年齡的方法,需要傳入一個新的年齡,方法將把這個新的年齡,重新賦值給age來完成age的更新。在第19行代碼中我們傳入19,然后打印出的信息確實顯示了我們所傳入的年齡,即用方法更新屬性的值是可行的。其實,這種方式是我們常用的,一般情況下,我們不會直接訪問類中的屬性,所以需要用方法來做“中間人”,因為這樣,我們可以在方法中做一些額外的操作,比如在重新賦值前先判斷年齡是否非法(負數),如果非法就不改變原先屬性值或將原先的值設置為默認值。
友誼是如此的甜美穩固忠誠,又至死不渝的神聖情感,只要他們不跟你借錢