python中的靜態方法、類方法、屬性方法
阿新 • • 發佈:2018-11-23
該部分的三個屬性都是高階方法,平時用的地方不是很多
一、靜態方法
靜態方法的使用不是很多,可以理解的就看一下,用的地方不是很多
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