對象:程序中使用的所有值都是對象,對象由內部屬性和方法組成 這些方法會執行與數據相關的各種操作,前面操作列表類型數據時 我們已經用過了方法:
data = [37,34]; data.insert(1,25); data.append(23) print(data);
輸出結果:
37,25,34,23
dir()函數 可以列出對象上可用的方法 是進行交互式體驗的工具
dir(data)
輸出結果:
['__add__', '__class__', '__contains__', ......'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
在使用dir()函數查看對象的方法時 會發現有很多以下劃線開始和結束的特殊的方法 這些方法用於實現各種運算方式;
例如:
data = data +[3,4,50]; print(data);
python中的+運算符 實際上是執行了如下操作:
data.__add__([3,4,5])
注:兩個對象是否能進行加法運算 首先要看相應的對象是否存在__add__()方法 ,如果有 即使這個對象從數學上不可加 我們都可以用加法的形式來表達其所定義的操作,因此可以得出結論:python中 類似於__add__這樣的魔術方法 一般定義了其不同的行爲 __add__相對應的行爲 就是 +運算或者連接
在面向對象編程中 class objName class:定義對象的類 objName:類名
class Stack(object): def __init__(self): #__init__ 構造器,當一個實例被創建的時候 調用的初始化方法 self.stack = []; def push(self,object): self.stack.append(object); def pop(self): return self.stack.pop(); def length(self): return len(self.stack);
在定義Stack類時 語法 class Stack(object) 將Stack聲明爲一個object 圓括號是python指定繼承的方式 因此 Stack類繼承自object object是所有python類型中的根類型
類中使用def語法 定義了方法 每個方法中的第一個參數 self 始終都指向對象自身
self變量:涉及對象的所有操作 必須引用self變量
如何使用Stack呢?
s = Stack(); s.push("Dave"); s.push([3,4,5,6]); s.push(32); x = s.pop();
輸出結果
32
y = s.pop();
輸出結果:
[3, 4, 5, 6]
append()方法:該方法 在python中的列表一章節中有過介紹,用於在列表的末尾追加一個元素
pop()方法:用於從列表末尾刪除一個元素 並返回該元素
len() 函數 :返回列表中元素的個數
Stack類實際上是創建了一個全新的對象用於實現棧 但是 該棧與內置的列表對象幾乎完全相同 因此我們可以直接繼承list 然後添加額外的方法即可
class Stack(list): def push(self,object): self.append(object);
當繼承列表對象時,列表對象的方法Stack對象可直接進行使用
s = Stack(); s.push(66); s.push(65); s.push(64); s.push(63);
輸出結果:
[66, 65, 64, 63]
s.reverse();#此方法 用於反轉列表中元素的順序
輸出結果:
[63, 64, 65, 66]
在類中如何創建靜態方法?
通常 類中定義的所有方法 只使用與該類的實例(創建的對象) 但是 也可以定義靜態方法(可以像函數一樣調用)
class MyObject(object): @staticmethod def myCheck(): return 'ok'; result = MyObject.myCheck(); print(result);
輸出結果:
ok
@staticmethod 是一個裝飾器(decorator)實際上就是一個函數 當我們在執行myCheck函數之前裝飾器的staticmethod 函數先執行將myCheck方法定義爲了靜態方法
總結:
1,dir()方法:可查看對象所有的方法
2,魔術方法:以雙下劃線開始結束的方法 該類方法定義了不同的行爲如:__add__()方法 定義了+運算
3,python中定義類的方法以及如何繼承對象 如: class MyObject(object)
4,@staticmethod: 裝飾器的使用 :將一個方法定義爲靜態方法