前言
這兩種初始化形式,就類似於C++類中的構造函數。
形式1:def_init_(self)
class Student_Grade: def __init__(self): # 類似於c++中的默認構造函數 self.name = None self.grade = None def print_grade(self): print("%s grade is %s" % (self.name,self.grade)) s1 = Student() # 創建對象s1 s1.name = "Tom" s1.grade = 8 s2 = Student() # 創建對象s2 s2.name = "Jerry" s2.grade = 7 s1.print_grade() s2.print_grade()
這種形式在__init__方法中,只有一個self,指的是實例的本身,但是在方法的類部,包含兩個屬性,name, grade。它允許定義一個空的結構,當新數據來時,可以直接添加。實例化時,需要實例化之后,再進行賦值。
形式2:def_init_(self, 參數1,參數2,···,參數n)
class Student_Grade: def __init__(self, name, grade): self.name = name self.grade = grade def print_grade(self): print("%s grade is %s" % (self.name,self.grade)) s1 = Student("Tom", 8) # 創建對象s1 s2 = Student("Jerry", 7) # 創建對象s2 s1.print_grade() s2.print_grade()
這種形式在定義方法時,就直接給定了兩個參數name和grade,且屬性值不允許為空。實例化時,直接傳入參數。
總結:
1、self是形式參數,當執行s1 = Student(“Tom”, 8)時,self等於s1;當執行s2 = Student(“sunny”, 7)時,self=s2。
2、兩種方法的區別在於定義函數時屬性賦值是否允許為空和實例化時是否直接傳入參數