python中的靜態方法、類方法、屬性方法(福利:關於幾種方法更好的解釋)

該部分的三個屬性都是高級方法,平時用的地方不是很多

一、靜態方法

靜態方法的使用不是很多,可以理解的就看一下,用的地方不是很多


class Dog(object):
    def __init__(self,name):
        self.name = name


    # 靜態方法:平時用的不是很多,可以通過聯想中國和臺灣的關係來記憶
    # 只是名義上歸類管理,實際上在靜態方法中訪問不了類或實例中的任何屬性
    @staticmethod    # 變成靜態方法之後該方法就和類沒什麼關係了,就只是相當於一個單純的函數,
    def eat(self):  # 並且沒法使用類裏面的變量了,但是可以使用自己的變量
        # def eat(self, food):
        # print("%s is eating %s..."%(self.name,food))
        print("%s is eating %s..." % ("ddd", "sss"))



d = Dog("zhangsan")
d.eat("baozi")

在這裏插入圖片描述

二、類方法

和靜態方法一樣,用的地方不是很多

class Dog(object):

    n = "ddd"  # 類變量
    def __init__(self,name):
        self.name = name

    # 類方法:無論實例變量怎麼改,都是依據類變量來變化和靜態方法一樣 基本用不到
    @classmethod # 類方法只能訪問類變量,不能訪問實例變量
    def eat(self,food):  # 實例變量
        print("%s is eating %s..."%(self.n,food))

d = Dog("zhangsan")  # 因爲類方法只能訪問類變量,所以無論該參數是什麼,結果都是'ddd'
d.eat("baozi")

三、屬性方法

屬性方法的使用有實例,但是用的地方也不是很多

class Dog(object):

    def __init__(self,name):
        self.name = name
        self.__food = None

    # 屬性方法: 把一個方法變成一個靜態屬性,就不能再調用了
               # 隱藏了方法,對用戶來說就是提供了一個API,實現就一步
    @property
    def eat(self):  # 實例變量
        print("%s is eating %s..."%(self.name,self.__food))

    @eat.setter  # 如果想使屬性變量可以傳參數(修改屬性),可以這麼設置
    def eat(self,food):
        print("set to food:",food)
        self.__food = food

    @eat.deleter # 可以通過此方法刪掉屬性
    def eat(self):
        del self.__food
        print("刪完了")

d = Dog("zhansgan")
# d.eat()  # 這是不行的,因爲靜態方法變成屬性之後就不能在調用了
d.eat   # 只能以方法的形式來調用,就不能傳參數了

del d.eat  # 如果不通過@eat.deleter,這個操作是沒用的
d.eat  # 報錯之後說明屬性通過@eat.deleter得到了刪除

屬性方法的使用可以結合下面的實例來理解:


class Flight(object):
    def __init__(self,name):
        self.flight_name = name


    def checking_status(self):
        print("checking flight %s status " % self.flight_name)
        return  0

    @property
    def flight_status(self):
        status = self.checking_status()
        if status == 0 :
            print("flight got canceled...")
        elif status == 1 :
            print("flight is arrived...")
        elif status == 2:
            print("flight has departured already...")
        else:
            print("cannot confirm the flight status...,please check later")
    @flight_status.setter
    def flight_status(self,status):
        print("flight %s has changed status to %s" %(self.flight_name,status))
f = Flight("CA980")
f.flight_status
f.flight_status = 2

在這裏插入圖片描述

福利:

1.在網上瀏覽到的關於幾種方法更好的解釋詳情請見:https://www.cnblogs.com/wcwnina/p/8644892.html
2.不能獲得的,這個和變量的生命週期有關,一個方法中的一個變量的生命週期是從它在這個方法中聲明開始,到這個方法調用完畢時結束。
因此你在類A中的方法a中無法調用類B中的方法b中的變量var_b,因爲這個變量在這個時間還沒有被創建。

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