詳解Python類中的三種方法

前言

在Python中定義的類,常用的有三種方法(方法其實就是函數),他們分別是實例方法、類方法和靜態方法。他們使用於不同的場景,今天就教大家如何區分並在類中正確的使用他們,達到我們需要的效果。

實例方法

首先我們定義一個Student類,包含學生姓名,性別最基礎的信息。

class Student:

    def __init__(self, name, sex):
        self.name = name
        self.sex = sex

    def get_info(self):
        return '{} {}'.format(self.name, self.sex)


stu_1 = Student('luopan', 'male')
stu_2 = Student('lucky', 'female')
print(stu_1.get_info())
print(stu_2.get_info())

這裏的get_info函數就是實例方法,實例方法第一個參數必須是self,是最常用的方法。

類方法

假設我們現在的學生都是一年級,那我就定義一個變量level,默認值爲1。隨着時間,這些學生都會進入下一年級,如果我們定義一個實例變量的話,是沒法實現每個學生的level都發生變化這個功能的,除非每個學生實例都調用這個函數。

class Student:

    level = 1

    def __init__(self, name, sex):
        self.name = name
        self.sex = sex

    def get_info(self):
        return '{} {}'.format(self.name, self.sex)

    def set_level(self, level):
        self.level = level



stu_1 = Student('luopan', 'male')
stu_2 = Student('lucky', 'female')
print(stu_1.level)
print(stu_2.level)
stu_1.set_level(5)
print(stu_1.level)
print(stu_2.level)

1
1
5
1

這裏我們就需要用到類方法,類方法第一行要有裝飾器 @classmethod ;函數第一個參數必須是關鍵詞 clf 。

class Student:

    level = 1

    def __init__(self, name, sex):
        self.name = name
        self.sex = sex

    def get_info(self):
        return '{} {}'.format(self.name, self.sex)

    @classmethod
    def set_level(cls, level):
        cls.level = level


stu_1 = Student('luopan', 'male')
stu_2 = Student('lucky', 'female')
print(stu_1.level)
print(stu_2.level)
Student.set_level(3)
print(stu_1.level)
print(stu_2.level)
stu_1.set_level(5)
print(stu_1.level)
print(stu_2.level)

1
3
3
5
5

這裏可以看到無論是類還是對象調用類方法,結果都是一樣的。

靜態方法

靜態方法第一行要有裝飾器 @staticmethod ,函數參數絕對不能有關鍵詞 clf 和 self。例如我們實現輸入什麼就打印什麼的功能(現實中可能並不需要,只是爲了方便解釋),他是獨立的,所以我們就要考慮用靜態方法。

import datetime

class Student:

    level = 1

    def __init__(self, name, sex):
        self.name = name
        self.sex = sex

    def get_info(self):
        return '{} {}'.format(self.name, self.sex)

    @classmethod
    def set_level(cls, level):
        cls.level = level

    @staticmethod
    def test(course):
        print('test {}'.format(course))


stu_1 = Student('luopan', 'male')
stu_1.test('語文')

test 語文

總結

實例方法是最常用的方法。
類方法無論是類還是對象調用類方法,結果都是一樣的。常用來
靜態方法不隨對象和類的屬性而改變,常用來做一些簡單獨立的任務,既方便測試,也能優化代碼結構。

今天的分享就到這了,我們下期再見~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章