1. 程式人生 > 實用技巧 >python基礎-面向物件(四)靜態屬性。類方法,靜態方法

python基礎-面向物件(四)靜態屬性。類方法,靜態方法

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,也就不能指類本身或例項本身,從而不能呼叫相應的類屬性和類方法。