1. 程式人生 > >Python例項方法, 類方法, 靜態方法, 函式 小結

Python例項方法, 類方法, 靜態方法, 函式 小結

  •   不想訪問 類內 和 例項內 的變數,用靜態方法

  •   只想訪問類內變數,不想訪問例項變數,用類方法

  •   即要訪問內變數,也想訪問例項變數用例項方法

  •   函式與靜態方法相同,只是靜態方式的作用域定義在類內

例項方法:

語法:
    class 類名(繼承列表):
        def 例項方法名(self, 引數1, 引數2, ...):
            '文件字串'
            語句
作用:


    用於描述一個物件的行為,讓此型別的全部物件都擁有相同的行為


說明:
    1. 例項方法實質是函式,是定義在類內的函式
    2. 例項方法至少有一個形參有,第一個形參代表呼叫這個方法的例項,一般命名為 'self'

示例:

# # 此示例示意例項方法的建立和呼叫
class Dog:
    '''這是一種小動物的定義
    此類動物有吃(eat)的行為:

    '''
    def eat(self, food):
        '''此方法用來描述小狗吃的行為'''
        print("小狗正在吃:", food)

    def sleep(self, hour):
        print("小狗睡了%d小時" % hour)

    def play(self, obj):
        print("小狗正在玩:", obj)


dog1 = Dog()  # 呼叫建構函式建立一個例項物件 再用dog1變數繫結
dog1.eat('骨頭')
dog1.sleep(1)
dog1.play('球')


dog2 = Dog()  # 建立另一個例項物件
dog2.eat('包子')
dog2.sleep(3)
dog2.play('飛盤')

類方法  @classmethod

類方法是用於描述類的行為的方法,類方法屬於類,不屬於類的例項

說明:
    類方法需要使用@classmethod裝飾器定義
    類方法至少有一個形參,第一個形參用於繫結類,約定寫為'cls'
    類和該類的例項都可以呼叫類方法
    類方法不能訪問此類建立的例項的屬性

示例:

# 此示例示意類方法的使用
class A:
    v = 0

    @classmethod
    def get_v(cls):  # cls 用來繫結呼叫此方法的類
        return cls.v  # 訪問類變數

    @classmethod
    def set_v(cls, value):
        cls.v = value


print(A.get_v())  # 0
A.set_v(100)
print(A.get_v())  # 100
a1 = A()  # 建立例項
print("a1.get_v() =", a1.get_v())  # 100
a1.set_v(200)
print("a1.get_v() =", a1.get_v())  # 200
print('A.get_v() =', A.get_v())

靜態方法  @staticmethod

靜態方法是定義在類內部的函式,此函式的作用域是類的內部

說明:
    靜態方法需要使用 @staticmethod裝飾器定義
    靜態方法與普通函式定義相同,不需要傳入self例項引數和cls引數
    靜態方法只能憑藉該類或類建立的例項呼叫
    靜態方法不能訪問類變數和例項變數(屬性)

示例:

#示意靜態方法建立與呼叫
class A:
    @staticmethod
    def myadd(a, b):
        return a + b


print(A.myadd(100, 200))  # 300
a = A()  # 建立例項
print(a.myadd(300, 400))  # 700