廖雪峰python3教程學習隨筆

2021-09-13 03:28:39 字數 3973 閱讀 5578

(未完)

1.建立例項的時候,需要定義乙個特殊的__init__方法,而且它的第乙個引數永遠是self,表示建立的例項本身。因此,在__init__方法內部,就可以把各種屬性繫結到self,因為self就指向建立的例項本身。

>>

>

class

student

(object):

...def

__init__

(self,name,score):.

.. self.name=name..

. self.score=score

定義了__init__後,建立例項的時候就不能傳入空參,除了self外,其它引數必須與__init__匹配

2.在python中,變數如果以兩個下劃線開頭,那這個變數就變成了乙個私有變數 如:

class

student

(object):

def__init__

(self,name,score)

: self.__name=name

self.__score=score

defprint_score

(self)

:print

('%s:%s'

%(self.__name,self.__name)

)

3.在外部直接設定物件的屬性與用setter方法設定物件屬性相比,缺點在於前者不能設定一些語句對傳入的值進行判斷,不能防止被傳入惡意的值。

4.以雙劃線開頭+結尾的變數是特殊變數,比如__***__,是可以直接訪問的。

5.判斷物件的型別:使用type()函式:

>>

>

type

(123

)<

class

'int'

>

>>

>

6.可以使用dir()獲取乙個物件的所有屬性和方法:

>>

>

dir(

'123')[

'__add__'

,'__class__'

,'__contains__'

,'__delattr__'

,'__dir__'

,'__doc__'

,'__eq__'

,'__format__'

,'__ge__'

,'__getattribute__'

,'__getitem__'

,'__getnewargs__'

,'__gt__'

,'__hash__'

,'__init__'

,'__init_subclass__'

,'__iter__'

,'__le__'

,'__len__'

,'__lt__'

,'__mod__'

,'__mul__'

,'__ne__'

,'__new__'

,'__reduce__'

,'__reduce_ex__'

,'__repr__'

,'__rmod__'

,'__rmul__'

,'__setattr__'

,'__sizeof__'

,'__str__'

,'__subclasshook__'

,'capitalize'

,'casefold'

,'center'

,'count'

,'encode'

,'endswith'

,'expandtabs'

,'find'

,'format'

,'format_map'

,'index'

,'isalnum'

,'isalpha'

,'isascii'

,'isdecimal'

,'isdigit'

,'isidentifier'

,'islower'

,'isnumeric'

,'isprintable'

,'isspace'

,'istitle'

,'isupper'

,'join'

,'ljust'

,'lower'

,'lstrip'

,'maketrans'

,'partition'

,'replace'

,'rfind'

,'rindex'

,'rjust'

,'rpartition'

,'rsplit'

,'rstrip'

,'split'

,'splitlines'

,'startswith'

,'strip'

,'swapcase'

,'title'

,'translate'

,'upper'

,'zfill'

]

類似__***__的屬性和方法在python中都是有特殊用途的,比如__len__方法返回長度。在python中,如果呼叫len()函式試圖獲取乙個物件的長度,在這個函式的內部,它會自動呼叫該物件的__len__()方法。對於我們自己寫的類,如果也想呼叫len(object),就得自己寫乙個__len__()方法。

7.編寫程式的時候不要把例項屬性和類屬性使用相同的名字,因為相同名稱的例項屬性會遮蔽掉類屬性,但是把例項屬性刪掉以後,再使用相同的名稱,還是可以訪問類屬性。

8.多型: 對於乙個變數,我們只需要知道它是某個型別,無序確切知道它的子型別,就可以放心地呼叫它的方法,而具體呼叫的run()方法是作用在父類還是在其它子類上,由執行時該物件的確切型別決定。多型的威力體現在:呼叫方只管呼叫,不用管細節。

p190的練習題: 請利用@property給乙個screen物件加上width和height屬性,以及乙個唯讀屬性resolution:

class

screen

(object):

@property

#這種裝飾器就是負責把乙個方法變成屬性呼叫的

defwidth

(self)

:return self._width

@width.setter

defwidth

(self,width)

: self._width=width

@property

defheight

(self)

:return self._height

@width.setter

defheight

(self,height)

: self._height=height

@property

defresolution

(self)

:return self._width*self._height

s=screen(

)s.width=

1024

s.height=

768print

(s.resolution)

assert s.resolution==

786432

,'1024*768=%d?'

%s.resolution

#這裡assert是乙個異常處理語句,它的標準格式為:assert expression1 [',' 語句]

#方框裡的語句可選,用於報告錯誤。如果expression1值為假,那麼會輸出方框裡語句的內容

執行結果:

python學習3(廖雪峰教程) 函式

1.函式定義 依次寫出函式名 括號 括號中的引數和冒號 然後,在縮排塊中編寫函式體,函式的返回值用return語句返回。def my abs x if x 0 return x else return x如果想定義乙個什麼事也不做的空函式,可以用pass語句 def nop passpass語句什麼...

廖雪峰python3教程筆記(迭代器)

2.使用isinstance判斷乙個物件是否是迭代器 isinstance x for x in range 11 iterator true isinstance iterator false3.iterator物件表示得是乙個資料流,我們可以把這個資料流看作乙個有序序列,但卻不能提前知道序列得長...

python廖雪峰教程 學習筆記

如何用字元來描述字元 d匹配數字 digit w匹配字母或數字 word s可以匹配空格 space 表示任意個字元,表示至少乙個字元 表示0個或1個字元,表示n個字元,表示n m個字元 可以匹配任意字元 例如 kongxiangyu w如何做到更精確的匹配?規定數字 字母或者下劃線 0 9a za...