python學習(七) 更加抽象

2022-04-13 06:26:07 字數 2440 閱讀 8084

python是物件導向的語言。

7.1 物件的魔力

7.1.1 多型

不管是字串還是列表,count()函式都可以正常工作。

>>> ['ab','b','c'].count('c')

1>>> 'abc'.count('c')

1下面的加號 + 運算子對於整數和列表都可以起作用,而且行為不同:

>>> 1 +2

3>>> 'fsafda' + 'fsdfs'

'fsafdafsdfs'

7.1.2 封裝

7.1.3 繼承

7.2 類和型別

7.2.1 類到底是什麼

7.2.2 建立自己的類

self:類自動的將自己作為第乙個引數傳遞進去,代表物件本身。

self引數事實上正是方法和函式的區別。

>>> class

person:

defsetname(self, name):

self.name =name

defgetname(self):

return

self.name

defgreet(self):

print('

hello world ! i am %s

' %self.name)

>>> foo =person()

>>> bar =person()

>>> foo.setname("

jordan")

>>> bar.setname('

kobe')

>>>foo.greet()

hello world ! i am

jordan

>>>bar.greet()

hello world ! i am kobe

7.2.3 特性、函式和方法

預設情況下,程式可以從外部訪問乙個物件的特性。

python並不直接支援私有方法。但是有一些小技巧可達到私有特性的效果。

為了讓方法或者變數變為私有(從外部無法訪問),只要在它的名字前面加上雙下劃線即可:

幕後是這麼做的:以雙下劃線開始的名字都被翻譯成前面加上單下劃線和類名的形式,所以還是可以在類的外部呼叫這些私有方法和變數(這樣做不好)。

如果不需要使用這種方法但是又想讓其他物件不要訪問內部資料,那麼可以使用單下劃線。這只是個習慣,但有實際效果。例如,前面有下劃線的名字都不會被帶星號的import語句(from module import *)匯入。

7.2.4 類的命名空間

>>> def foo(x): return x*x

>>> foo(5)

25>>> foo2 = lambda x: x*x

>>> foo2(5)

25

>>> class c: 

print('class c being defined')// 類內部的函式也可以不用def定義,可以直接寫執行語句

class c being defined

>>> class

membercounter:

members =0 //類的作用域中定義了供所有成員訪問的變數,用來計算類的成員數量。

definit(self):

membercounter.members += 1

>>> m1 =membercounter()

>>>m1.init()

>>>membercounter.members

1>>> m2 =membercounter()

>>>m2.init()

>>>membercounter.members

2

7.2.5 指定超類

class spamfilter(filter)   //將其他類名寫在class語句後的圓括號內可以指定超類。

7.2.6 檢查繼承

issubclass函式可以檢查乙個類是否是另外乙個類的子類

issubclass(spamfilter, filter) : 判斷spamfilter是否是filter的子類。

spamfilter.__bases__ : 得到已知類的基類。

isinstance(s, spamfilter)

7.2.7 多個超類

class talkingcalculator(calculator, talker)    //   python允許繼承自多個基類,多重繼承

多重繼承的兩個類如果有方法同名,那麼先繼承的類的方法會覆蓋後繼承的類的方法。

7.2.8 介面和內省

7.3 一些關於物件導向設計的思考

Python學習筆記(七)更加抽象

本章主要介紹內容為建立自己的物件 7.2 建立自己的類 首先看使用乙個簡單的類 metaclass type class person def setname self,name self.name name def getname self return self.name def greet s...

python學習筆記 7 更加抽象

usr bin env python coding utf 8 指定原始碼檔案編碼,python預設為ascii metaclass type 確定使用新式類 class person def setname self,name self 為是當前例項的引用 self.name name def g...

python之更加抽象 2014 4 6

更加抽象 12 50pm 14 50 p112 1.物件的魔力 多型 如count 在多種資料型別中都可以實現計數的功能 封裝 對全域性作用域中其他區域隱藏多餘資訊的原則 繼承2.類和型別 建立類class person def setname self,name self.name name de...