python--類方法、對象方法、靜態方法

1、我們已經討論了類/對象可以擁有像函數一樣的方法,這些對象方法與函數的區別只是一個額外的self變量

# -*- coding:utf-8 -*-
    #!/usr/bin/python
    # Filename: method.py

    class Person:
        grade=1
        def __init__(self,name):
            self.name = name
        def sayHi(self):#加self區別於普通函數
            print 'Hello, your name is?',self.name

        @staticmethod #聲明靜態,去掉則編譯報錯;還有靜態方法不能訪問類變量和實例變量
        def sayName():#使用了靜態方法,則不能再使用self
            print "my name is king"#,grade,#self.name

        @classmethod #類方法
        def classMethod(cls):
            print("class method")

    p = Person("king")
    p.sayHi()
    p.sayName()
    p.classMethod()
    Person.classMethod()

    輸出:
    Hello, your name is? king
    my name is king
    class method

2、靜態方法
要在類中使用靜態方法,需在類成員函數前面加上@staticmethod標記符,以表示下面的成員函數是靜態函數。使用靜態方法的好處是,不需要定義實例即可使用這個方法。另外,多個實例共享此靜態方法。

3、 類方法
類方法與普通的成員函數和靜態函數有不同之處,在接觸的語言中好像也沒見過這種語義,看它的定義:
一個類方法就可以通過類或它的實例來調用的方法, 不管你是用類來調用這個方法還是類實例調用這個方法,該方法的第一個參數總是定義該方法的類對象。
記住:方法的第一個參數都是類對象而不是實例對象.
按照慣例,類方法的第一個形參被命名爲 cls.任何時候定義類方法都不是必須的(類方法能實現的功能都可以通過定義一個普通函數來實現,只要這個函數接受一個類對象做爲參數就可以了).

python中實現靜態方法和類方法都是依賴於python的修飾器來實現的。 對象方法有self參數,類方法有cls參數,靜態方法是不需要這些附加參數的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章