靜態(tài)方法實際上與類(或者實例)沒有什么關系。
使用了靜態(tài)方法遏匆,則不能像實例方法那樣再使用self法挨。
裝飾器:
@staticmethod # 靜態(tài)方法
@classmethod # 類方法
@property # 屬性方法
靜態(tài)方法可以使用類調用也可以使用對象調用:
class Dog(object):
def __init__(self, name):
self.name = name
@staticmethod
def eat():
print(" is eating ")
# 類調用
Dog.eat()
# 對象調用
d = Dog('dog1')
d.eat()
靜態(tài)方法:
只是名義上歸類管理,實際上在靜態(tài)方法里面訪問不了類或者實例的任何屬性幅聘。 一般不需要傳參數(shù)self凡纳。
類方法
只能訪問類變量,不能訪問實例變量帝蒿。需要有self參數(shù)荐糜。
類方法的示例:
class Dog(object):
food2 = "food2"
def __init__(self, name):
self.name = name
@classmethod
def eat(self):
print(" is eating %s " %self.food2)
Dog.eat()
d = Dog('dog1')
d.eat()
或者這樣:
class Dog(object):
food2 = "food2"
def __init__(self, name):
self.name = name
@classmethod
def eat(cls):
print(" is eating %s " %cls.food2)
Dog.eat()
d = Dog('dog1')
d.eat()
屬性方法:
把一個方法變成一個靜態(tài)屬性。調用的時候不需要加()
。
屬性方法的作用是:(比如OC中)代替setter和getter方法的作用:https://segmentfault.com/q/1010000000142528
使用屬性方法代替setter和getter方法暴氏。
class Dog(object):
def __init__(self, name):
self.name = name
@property
def eat(self):
# print("I am eating")
return 'eat'
def abc(self):
print('abc')
d = Dog('xg')
print (d.eat)
PyCharm的提示:
p:parameter 參數(shù)
m:method 方法
c:class 類
v:variable 變量
f:function 函數(shù)
屬性方法丛版,類似于setter和getter方法,里面有邏輯的話偏序。
class Dog(object):
def __init__(self, name, food):
self.name = name
self.food = food
@property
def food(self):
return self._food
@food.setter
def food(self, food):
print("設置之前我想有打印")
self._food = food
d = Dog('xiaoming', 'baozi')
d.food = 'ok'
print(d.food)
#打右称琛:
設置之前我想有打印
設置之前我想有打印
ok