python 類成員函數


http://cowboy.1988.blog.163.com/blog/static/75105798201091141521583/

這篇文章總結的非常好

主要注意的地方是

1,在類內調用成員函數

要用類名調用,而且要傳入self(非靜態成員函數是實例相關的)

如:

class Foo(object):
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客     
def bar(self):
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客         
print "bar!"
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客     
def spam(self):
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客         bar(self)     
# 錯誤,引發NameError
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客
         Foo.bar(self) # 合法的

2,靜態成員函數的使用

要在類中使用靜態方法,需在類成員函數前面加上@staticmethod標記符,以表示下面的成員函數是靜態函數。

class SimClass():
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客   @staticmethod
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客   def ShareStr():
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客      print "This is a static Method"
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客SimClass.ShareStr()   #使用靜態函數

3,多繼承,以及多繼承下,兩個父類同名函數的調用問題

class D(oject): pass                    #D繼承自object
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客
    class B(D):                             #B是D的子類
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客
        varB = 42
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客        
def method1(self):
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客            
print "Class B : method1"
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客    
class C(D):                             #C也是D的子類
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客
        varC = 37
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客        
def method1(self):
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客            
print "Class C : method1"
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客       
def method2(self):
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客           
print "Class C : method2"
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客   
class A(B,C):                           #A是B和C的子類
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客
       varA = 3.3
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客       
def method3(self):
python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客          
print "Class A : method3"
如果我要調用A.method1() ,會出現什么結果?答案是ClassB:method1. 書上是這樣介紹的:
當搜索在基 類中定義的某個屬性時,Python采用深度優先的原則、按照子類定義中的基類順序進行搜索。**注意**(new-style類已經改變了這種行為,為了向前兼容,默認情況下用戶定義的類為經典類,定義新式類需要繼承所有類的基類object或者繼承自object的新類。新式類的搜索方式是采用廣度優先的方法查找屬性。在 python 3 里面,所有的類都是object類的子類(隱式))
上邊例子中,如果訪問 A.varB ,就會按照python 靜態函數 類 - cowboy小屋 - cowboy小屋的博客A-B-D-C-D這個順序進行搜索,只要找到就停止搜索.若有多個基類定義同一屬性的情況,則只使用第 一個被找到屬性值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM