python語法拾遺 OOP與錯誤除錯

2021-10-02 05:07:17 字數 3602 閱讀 6620

title: python語法拾遺(一)

date: 2019-11-12 12:23:49

categories:

類(class)與例項(instance)類是抽象的模板,例項是根據類建立的具體「物件」。例項之間擁有相同的方法,但各自資料可能不同。

__init__方法,給模板類新增必要的屬性。其中,在變數名前新增『__』雙下劃線,可以將其變為私有變數,即外部不能隨意訪問修改。

在類中定義方法,可以保護內部資料,將方法的具體細節隱藏在類內部。

class

studnet

(object):

def__init__

(self,name,score)

: self.__name = name

self.__score = score

defget_gender

(self)

:return self.__name

defset_score

(self,score):if

0<= score <=

100:

self.__score = score

else

:raise valueerror(

'bad score'

)

在定義乙個class之後,可以從現有的class繼承,新的class稱為之類,被繼承的類稱為父類。子類可以繼承父類的全部功能。

多型是指,子類繼承父類的方法後,可以自行修改同一方法,覆蓋原方法。

鴨子型別:相對於靜態語言而言,動態語言要靈活許多。只要含有相同的方法名稱,不同繼承樹的例項,仍都可以執行。

isinstance判斷資料型別,類(名)也可以看作某種資料型別。

dir()獲取物件的所有方法和屬性,返回乙個list

hasattr(obj_name,'屬性')判斷物件是否含該屬性

setattr(obj_name,'屬性')設定新增屬性

getattr(obj_name,'屬性')獲取屬性

在class定義好後,仍可以在外部,利用methodtype給類或例項新增方法屬性。

class

student

(object):

pass

defset_age

(self,age)

:#定義乙個方法

self.age = age

from types import methodtype

s = student(

)s.set_age = methodtype(set_age,s)

#將指定方法新增到目標例項s

s.set_age(25)

s.age # 該方法僅限該例項s使用。

student.set_score = set_score # 給類繫結新方法,則其實例將擁有該新方法

__slots__僅允許類例項動態繫結指定屬性名,對類的動態繫結無效。

注意:只對該類例項有效,對類無效,對其繼承子類無效。除非在子類中也定義__slots__,這樣,子類例項允許定義的屬性就是自身的__slots__加上父類的__slots__。

class

student

(object):

__slots__ =

('name'

,'age'

)# 用tuple定義允許繫結的屬性名稱

通過多重繼承,乙個子類就可以同時獲得多個父類的所有功能。

為了區分繼承樹主線,一般使用mixin的設計模式。

class

class_name

(class1,class2mixin)

:pass

當使用者直接呼叫類或例項時,會返回該物件所在的記憶體位址。

>>

>

class

student

(object):

...def

__init__

(self, name):.

.. self.name = name..

.>>

>

print

(student(

'michael'))

# <__main__.student object at 0x109afb190>

__str____repr__的作用就是設定返回的指定內容。兩者的區別是__str__()返回使用者看到的字串,__repr__()返回程式開發者看到的字串,即,__repr__()是為除錯服務的。

class

student

(object):

...def

__init__

(self, name):.

.. self.name = name..

.def

__str__

(self):.

..return

'student object (name: %s)'

% self.name..

. __repr__ = __str__

print

(student(

'michael'))

# student object (name: michael)

try...except...finally:try部分用於測試**執**況。如果出錯就會跳轉到except部分,否則就跳過。執行完成後,如果有finally語句就繼續執行。

此外,如果沒有錯誤發生,可以在except語句塊後面加乙個else,當沒有錯誤發生時,會自動執行else語句

#e.g.

try:

print

('try...'

) r =10/

int(

'2')

print

('result:'

, r)

except valueerror as e:

print

('valueerror:'

, e)

except zerodivisionerror as e:

print

('zerodivisionerror:'

, e)

else

:print

('no error!'

)finally

:print

('finally...'

)print

('end'

)

python 基本語法 拾遺

django 開發中一般見到的python 內部類,最多是在model 設計過程中。所謂內部類,就是在類內部定義的類,主要目的是為了更好的抽象現實世界。內部類的距離 汽車是個類,汽車的地盤,輪胎也可以抽象為類,將其定義到汽車類中,則形成了內部類,更好的描述汽車類,因為底盤,輪胎是汽車的一部分 一般不...

python 常見語法拾遺 with 用法

有一些任務,可能事先需要設定,事後做清理工作。對於這種場景,python的with語句提供了一種非常方便的處理方式。usr bin env pythonclass test obj def enter self print in enter return test with def exit sel...

C語言基本語法拾遺

常量與指標 指標陣列 定義的變數是乙個陣列,陣列的每個元素都是乙個指定型別的指標。基本定義格式為 type var name n 例如 定義乙個包含100個元素的整型指標陣列p int p 100 下面這種定義方式與上面等價,因為運算子優先順序高於 運算子 int p 100 int main in...