1. 程式人生 > >python中的靜態方法、類方法、屬性方法

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

在這裡插入圖片描述