該部分的三個屬性都是高級方法,平時用的地方不是很多
一、靜態方法
靜態方法的使用不是很多,可以理解的就看一下,用的地方不是很多
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,因爲這個變量在這個時間還沒有被創建。