http://cowboy.1988.blog.163.com/blog/static/75105798201091141521583/
這篇文章總結的非常好
主要注意的地方是
1,在類內調用成員函數
要用類名調用,而且要傳入self(非靜態成員函數是實例相關的)
如:
class Foo(object): def bar(self):
print "bar!"
def spam(self):
bar(self) # 錯誤,引發NameError
Foo.bar(self) # 合法的
2,靜態成員函數的使用
要在類中使用靜態方法,需在類成員函數前面加上@staticmethod標記符,以表示下面的成員函數是靜態函數。
class SimClass(): @staticmethod
def ShareStr():
print "This is a static Method"
SimClass.ShareStr() #使用靜態函數
3,多繼承,以及多繼承下,兩個父類同名函數的調用問題
class D(oject): pass #D繼承自object class B(D): #B是D的子類
varB = 42
def method1(self):
print "Class B : method1"
class C(D): #C也是D的子類
varC = 37
def method1(self):
print "Class C : method1"
def method2(self):
print "Class C : method2"
class A(B,C): #A是B和C的子類
varA = 3.3
def method3(self):
print "Class A : method3"
如果我要調用A.method1() ,會出現什么結果?答案是ClassB:method1. 書上是這樣介紹的:
當搜索在基 類中定義的某個屬性時,Python采用深度優先的原則、按照子類定義中的基類順序進行搜索。**注意**(new-style類已經改變了這種行為,為了向前兼容,默認情況下用戶定義的類為經典類,定義新式類需要繼承所有類的基類object或者繼承自object的新類。新式類的搜索方式是采用廣度優先的方法查找屬性。在 python 3 里面,所有的類都是object類的子類(隱式))上邊例子中,如果訪問 A.varB ,就會按照A-B-D-C-D這個順序進行搜索,只要找到就停止搜索.若有多個基類定義同一屬性的情況,則只使用第 一個被找到屬性值