python基礎-面向物件(四)靜態屬性。類方法,靜態方法
阿新 • • 發佈:2020-12-09
1.靜態屬性:把類的函式屬性(method)方法變成像資料屬性(field)一樣呼叫。
類屬性包括資料屬性和函式屬性,呼叫資料屬性,直接點,不用括號。呼叫函式屬性,方法名後需要括號。使用者在呼叫的時候並不知道是資料屬性還是函式屬性,
使用者只是想呼叫,因此需要格式統一,一般在函式屬性上一行加@property,使函式屬性的呼叫和資料屬性一樣。
注意:使用@property後不能傳引數,也就是方法只有一個引數self的時候才能使用
class Dog: tag=1 def __init__(self,name,gender): self.name=name self.gender=gender @property def eat_(self): print('from eat(self)>>>%s在吃'%self.name) print(Dog.tag) #呼叫資料屬性 dog1=Dog('旺財','公') # dog1.eat_()#不加@property的時候,呼叫函式屬性,需要() dog1.eat_ #加了@property的時候,呼叫函式屬性,不用()
2.類方法:不用例項化就能呼叫類的方法
因為類呼叫方法不進行例項化此時會提示缺少必要的位置引數self。如果引數與self的屬性無關還好,如果有關又不例項化肯定報錯。畢竟self代表的就是例項本身
class Dog: tag=1 def __init__(self,name,gender): self.name=name self.gender=gender def eat_(self): print('from eat(self)>>>%s在吃'%self.tag) print(Dog.tag) #呼叫資料屬性 Dog.eat_('旺財')
使用@classmethod後
class Dog: tag = 1 def __init__(self, name, gender): self.name= name self.gender = gender @classmethod # 使用classmethod後自動傳參cls def eat_(cls): print('from eat(self)>>>%s在吃' % cls.tag) Dog.eat_()
3.靜態方法:名義上的歸屬類管理,類的工具包, 不能使用類變數和例項變數
如果需要定義.一個與類cls和例項self都無關的方法,就需要使用@staticmethod a.沒有@staticmethod
class Dog: tag = 1 def __init__(self, name, gender): self.name = name self.gender = gender @classmethod # 使用classmethod後自動傳參cls def eat_(cls): print('from eat(self)>>>%s在吃' % cls.tag) def test(a,b): print('test') Dog.test(1,2) #可以呼叫 dog1=Dog('旺財','公') dog1.test(1,2) #會自動傳self,報錯
b.加了@staticmethod後,例項不會自動傳self,可執行
class Dog: tag = 1 def __init__(self, name, gender): self.name = name self.gender = gender @classmethod # 使用classmethod後自動傳參cls def eat_(cls): print('from eat(self)>>>%s在吃' % cls.tag) @staticmethod def test(a, b): print('test') Dog.test(1, 2) # 可以呼叫 dog1 = Dog('旺財', '公') dog1.test(1, 2) # 會自動傳self,報錯
注意:靜態方法中不能調類屬性和方法,也不能呼叫例項變數,只是類的工具包。因為沒有self,也就不能指類本身或例項本身,從而不能呼叫相應的類屬性和類方法。