1. 程式人生 > >python --類方法、物件方法、靜態方法

python --類方法、物件方法、靜態方法

1、我們已經討論了類/物件可以擁有像函式一樣的方法,這些物件方法與函式的區別只是一個額外的self變數
  1. -*- coding:utf--*-
  2. #!/usr/bin/python
  3. # Filename: method.py
  4. class Person:
  5.     grade=1
  6.     def __init__(self,name):
  7.         self.name = name
  8.     def sayHi(self):#加self區別於普通函式
  9.         print 'Hello, your name is?',self.name
  10.     @staticmethod #宣告靜態,去掉則編譯報錯;還有靜態方法不能訪問類變數和例項變數
  11.     def
     sayName():#使用了靜態方法,則不能再使用self
  12.         print "my name is king"#,grade,#self.name
  13.     @classmethod #類方法
  14.     def classMethod(cls):
  15.         print("class method") 
  16. = Person("king")
  17. p.sayHi()
  18. p.sayName()
  19. p.classMethod()
  20. Person.classMethod()

    輸出:
  21. Hello, your name is? king
  22. my name is king
  23. class method
  24. class method

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

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

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