Python學習系列之類的定義、建構函式 def __init__

sereasuesue發表於2020-10-05

python def __init__(self, name等多引數), def __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())

 

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

參考:https://blog.csdn.net/m0_37693335/article/details/82972925

__init__的用法和理解

,兩個下劃線開頭的函式是宣告該屬性為私有,不能在類的外部被使用或訪問。而__init__函式(方法)支援帶引數類的初始化,也可為宣告該類的屬性(類中的變數)。__init__函式(方法)的第一個引數必須為self,後續引數為自己定義。__init__()這個特殊的方法就可以方便地自己對類的屬性進行定義,__init__()方法又被稱為構造器(constructor)

 

 

 


 

相關文章