廖雪峰學習記錄(第二彈)

2021-09-26 11:07:06 字數 3739 閱讀 7671

裝飾器顧名思義就是裝飾用的,理解為附加的一些功能,和普通函式一同食用,味道更佳哦

下面列出例項進行分析

1

.import functools2.

defsuv

(fn)

:#定義乙個閉包函式

3. @functools.wraps(fn)

#對原函式被覆蓋上的名字還原4.

defcout

(*a,

**b)

:#定義包內函式用來起裝飾器的作用5.

ifisinstance

(a,tuple):

#不同輸入的型別得到不同結果6.

map(prnt(a)

,a)7

.elif

isinstance

(a,int):

8.print

(a)9

.return fn(

*a,**b)

#記得一定要返回被修飾的函式值,原函式沒有作用了10.

return cout

11. @suv #等同lam = suv(lam)12.

deflam

(*a):13

. sum_res =014

.for i in a:

15. sum_res += i 16.

return sum_res

17. lam(1,

2,3)

(可能你們會覺得我為什麼,,不把前面序號去掉)

用來逐行解釋

逼迫扶我文章的小白自己敲一遍

- 廖雪峰教程

其中提到資料封裝,資料封裝用來把類內的資料實現方法隱藏起來,使得類外面呼叫時不知道資料怎麼得來的,但是可以呼叫資料。

接下來說說之上加乙個訪問限制這裡挺有意思想說說

class

student

(object):

def__init__

(self, name, score)

:#用來繫結預設屬性以及它們的初值

self.__name = name #student的name屬性

self.__score = score #student的score屬性

defprint_score

(self)

:print

('%s: %s'

%(self.__name, self.__score)

)

我們看到定義屬性時用了雙下槓__,比如self.__name,這樣的話在外部直接調就會出現問題

>>

> a = student(

'kang',99

)>>

> a.__name

traceback (most recent call last)

: file ""

, line 1,in

a.__name

attributeerror:

'student'

object has no attribute '__name'

很明顯結果報錯了,說明self.__name這個屬性外部不可以呼叫即private類,但是真的一點辦法都沒有嗎?

>>

>

class

student

(object):

def__init__

(self, name, score)

: self.__name = name

self.__score = score

defprint_score

(self)

:print

('%s: %s'

%(self.__name, self.__score)

)def

get_attr

(self)

:return self.__name,self.__score

>>

> a = student(

'kang',99

)>>

> a.get_attr()(

'kang',99

)

看明白了嗎?

就是用魔法打敗魔法,想在外埠呼叫那就得裡應外合了,類內部需要定義乙個返回函式屬性弄出來。

話說白了,就是乙個用self.attr來定義乙個直接在類中定義,另乙個直接在類的子錄下寫

class

student

(object

):

name =

'student'

#類屬性student.name--

----

----

----

----

----

--我是分割線---

----

----

----

----

----

----

----

-class

student

(object):

def__init__

(self,name=

'kang'

,score =

'90'):

self._name = name #類的例項物件self,例項屬性self._name與self._name

self._score = score # '_' 代表「我是私有屬性不要訪問我」的意思類似於告示的意思

#實際上是能夠用self._name的方式訪問的

統計學生人數,可以給student類增加乙個類屬性,每建立乙個例項,該屬性自動增加:

class

student

(object):

count =

0def

__init__

(self, name)

: self.name = name

student.count +=

1# 測試:

if student.count !=0:

print

('測試失敗!'

)else

: bart = student(

'bart'

)if student.count !=1:

print

('測試失敗!'

)else

: lisa = student(

'bart'

)if student.count !=2:

print

('測試失敗!'

)else

:print

('students:'

, student.count)

print

('測試通過!'

)

也就是說類的屬性是乙個類似全域性變數的形式,每次給類新建物件時意味著會預設執行__init__的內容,而類本身並沒用值的更改。

這算是我自己的乙份總結日記,不全是教學的,分享給學過基礎想要鞏固的人們

小白的話建議看之前有看過廖雪峰老師的學習**內容,過後用這個來複習。

Git 廖雪峰 學習筆記

目錄 git工作區域 git初始化及倉庫建立和操作 初始化新的git倉庫 1.新建資料夾 2.在檔案內初始化git 如何將本地倉庫同步到git 遠端倉庫 1.關聯遠端庫 2.第一次推送master分支的所有內容 3.每次本地提交後,推送最新修改 轉殖 分支管理 1.建立與合併分支 2.解決衝突 3....

git 廖雪峰學習筆記

git的誕生 linus堅決反對cvs和svn等集中式版本控制系統 因為速度慢且需要聯網 bitmover公司授權linux社群商業軟體bitkeeper免費使用權 linus社群牛人試圖破解bitkeeper的協議被bitmover公司發現 bitmover公司收回linux社群bitkeeper...

廖雪峰的Python學習筆記二 函式

在python中,定義乙個函式要使用def語句,依次寫出函式名 括號 括號中的引數和冒號 然後,在縮排塊中編寫函式體,函式的返回值用return語句返回。e.g.自定義求絕對值的函式my abs def my abs x if x 0 return x else return x小結 定義函式時,需...