1. 程式人生 > >python def __init__(self, name等多引數), def __init__(self)

python def __init__(self, name等多引數), def __init__(self)

最開始準備秋招的時候,接觸的都是這兩個的區別;__init__(self) 初始化,__new__例項化方法,兩者執行的順序,先有例項,才能初始化。

之前一直對__init__(self)裡面的引數很迷茫,一會這個地方看到別人這麼寫,一會看到別人那麼寫,自己也不知道,到底怎麼回事,有哪些區別,今天對這個內容進行了學習。進行系統的分析瞭解,主要從他的例項化的區別,含義的區別進行區分兩者之間的關係!

常見的兩種類的定義方式如下:

class Student:
    def __init__(self):#兩者之間的區別
        self.name = None
        self.score = None
    def __init__(self, name, score):
        self.name = name
        self.score = score

區別很明顯,前者在__init__方法中,只有一個self,指的是例項的本身,但是在方法的類部,包含兩個屬性,name, score

下面的這個即是在定義方法時,就直接給定了兩個引數,

針對這樣的兩個,之前不解的地方,是如何例項化,第二個很明顯就是直接例項化時,傳入相應的引數,而第一種,則需要例項化之後,對屬性進行賦值

# student = Student("sansan", 90)
student = Student()
student.name= "sansan"
student.score = 90

# susan = Student("sunny", 78)
susan = Student()
susan.name = "susan"
susan.score = 8

即顯示了兩種例項化的方法, 註釋的部分即是在建立的時候就直接傳入引數

那麼這兩者的區別,在哪裡?

第一種的區別,他定義了這樣一種類,他可以是一個空的結構,比如學生的表,當學生還沒有進行考試時,他已經有了學生的姓名和成績,當新的資料來的時候,可以直接新增進來。這個可以很方便的進行,

而第二種,則需要必須傳值,不允許為空。當然第二種對於已有資料的匯入是很方便的,在語句上減少了很多

class Student:
    def __init__(self):#兩者之間的區別
        self.name = None
        self.score = None

    # def __init__(self, name, score):
    #     self.name = name
    #     self.score = score

    def print_score(self):
        print("%s score is %s" % (self.name, self.score))

    def get_grade(self):
        if self.score >= 80:
            return "A"
        elif self.score >= 70:
            return "B"
        else:
            return "C"

# student = Student("sansan", 90)
student = Student()
student.name= "sansan"
student.score = 90

# susan = Student("sunny", 78)
susan = Student()
susan.name = "susan"
susan.score = 8

student.print_score()
susan.print_score()
print(susan.get_grade())
print(student.get_grade())

以上是一個很簡單的,兩者比較,

兩者都在上述程式碼中進行了簡單的實現,自己進行相應的註釋