《python基礎教程》 讀書筆記 6

2021-10-05 04:21:02 字數 4129 閱讀 1997

from random import choice

# 標準庫 random中包涵choice函式,可以從序列中隨機挑選出元素,給變數賦值

# 執行後你不必關心x是那種型別,只需知道x有個叫count的方法及它的呼叫方式和返回值類

x = choice(

["hello world",[

1,2,

3,"e",4,

"e"]])

print

(x.count(

"e")

)

多型的多種方式

任何不知道物件到底是什麼型別,但又要物件做點什麼的時候,都會用到多型。很多函式和運算子都是多型的

# 列印物件長度

deflength_message

(obj)

:print

("the length of"

,repr

(obj)

,"is"

,len

(obj)

)length_message([1

,2,3

])length_message(

"test"

)

所有的物件都屬於某乙個類,稱為類的例項

# 確定使用新式類

_metaclass_ =

type

class

person

:def

setname

(self, name)

: self.name = name

defgetname

(self)

:return self.name

defgreet

(self)

:print

("hello, i'm %s."

% self.name)

foo = person(

)# 在呼叫foo的setname函式時,foo自動將自己作為第乙個引數傳入函式中,所以命名為self

foo.setname(

"liu"

)# 可以在外部訪問

print

(foo.name)

foo.greet(

)

self引數正是方法和函式的區別。繫結方法將他們的第乙個引數繫結到所屬的例項上

預設情況下,程式可以從外部訪問乙個物件的特性。為了讓方法或者特性變為私有,只要在他的名字前面加上雙下劃線即可。

# 私有特性

class

secretive

:def

__inaccess

(self)

:print

("you can't see me..."

)def

accessble

(self)

:print

("the secret message is:"

) self.__inaccess(

)s = secretive(

)# s.__insccess()

s.accessble(

)

# 類的命名空間

class

membercounter

: members =

0def

init

(self)

: membercounter.members +=

1m1 = membercounter(

)m1.init(

)print

(membercounter.members)

# 1m2 = membercounter(

)m2.init(

)print

(membercounter.members)

# 2# 類作用域的變數也可以被所有例項訪問

print

(m1.members)

# 2print

(m2.members)

# 2# 重新繫結members

# 新members值被寫到了m1的特性中,遮蔽了類範圍內的變數

m1.members =

"test"

print

(m1.members)

# test

print

(m2.members)

# 2

# 指定超類

class

filter

:def

init

(self)

: self.blocked =

deffilter

(self,sequence)

:return

[x for x in sequence if x not

in self.blocked]

# spamfilter 是 filter的子類

class

spamfilter

(filter)

:# 重寫 超類中init方法

definit

(self)

: self.blocked =

["spam"

]# filter 是個用於過濾序列的通用類,事實上它不能過濾任何東西

# filter 可作為其他類的基類,比如spamfilter類,可以將序列中的"spam"過濾出去

s = spamfilter(

)s.init(

)# ['1', '2', '3', '4']

print

(s.filter([

"1",

"spam"

,"2"

,"spam"

,"3"

,"4"])

)

# 檢查繼承 issubclass函式

print

(issubclass

(spamfilter, filter)

)# true

print

(issubclass

(filter, spamfilter)

)# false ·

# 想要知道已知類的基類

print

(spamfilter.__bases__)

# (,)

print

(filter.__base__)

#

# 檢查例項 isinstance

print

(isinstance

(s, filter)

)# true

print

(isinstance

(s, spamfilter)

)# true

print

(isinstance

(s,str))

# false

# 想要知道物件屬於哪乙個類

print

(s.__class__)

#

# 多個超類

class

calcuator

:def

calculate

(self, expression)

: self.value =

eval

(expression)

class

talker

:def

talk

(self)

:print

("value is "

, self.value)

# 從calcuator類那裡繼承calculate方法,從talker那裡繼承talk方法

class

talkingcalcuator

(calcuator, talker)

:pass

tc = talkingcalcuator(

)tc.calculate(

"1+2+4"

)tc.talk(

)# value is 7

Python基礎教程 讀書筆記三

1.所有的標準序列操作都使用於字串,記住字串不可改變。2.字串格式化 標記轉換說明符 如果字串本身包含 用 代替。3.字串格式化轉換標誌 表示左對齊 表示在轉換值前加正負號 空白字元 表示正數之前保留空格 0表示轉換值若位數不夠用0填充。4.find str,begin index,end inde...

《python基礎教程》 讀書筆記(2)

所有標準的序列操作 索引 分片 乘法 判斷成員資格 求長度 取最大和最小值 對字串同樣適用。但是,字串是不可改變的。find find方法可以在乙個較長的字串中查詢子串,它返回字串所在位置的最左端索引,如果沒有找到則返回 1。title to be or not to be title.find b...

DELPHI基礎教程讀書筆記

集合型別是一群相同型別元素的組合,這些型別必須是有限型別如整形 布林型 字元型 列舉型和子界型。在檢查乙個值是否屬於乙個特定集合時,集合型別非常有用。下面的例程可以說明集合型別的用法 type tvowels set of char varvowels tvowels 表示式edit1.text 1...