python高階程式設計 類 以及自省機制

2021-10-14 13:06:41 字數 3389 閱讀 7830

例項方法 靜態方法 類方法

私有屬性

python自省機制

查詢順序是a->b->d->c, 但是如果c過載了d的某個方法(b沒有過載該方法), 由於深度優先所以將會使用d中的方法, 這是不合理的

查詢順序是a->b->c->d->e, 由於優先順序關係, b和d的優先順序高於c, 但是如果c和d中定義了同乙個方法, 由於廣度優先所以將會使用c中的方法, 這是不合理的

類方法無須建立例項物件呼叫,所以類方法的呼叫較例項方法更為靈活

例項方法只能通過例項物件呼叫;類方法和靜態方法可以通過類物件或者例項物件呼叫,如果是使用例項物件呼叫的類方法或靜態方法,最終都會轉而通過類物件呼叫。

例項方法使用最多,可以直接處理例項物件的邏輯;類方法不需要建立例項物件,直接處理類物件的邏輯;靜態方法將與類物件相關的某些邏輯抽離出來,不僅可以用於測試,還能便於**後期維護。

例項方法和類方法,能夠改變例項物件或類物件的狀態,而靜態方法不能。

## 私有屬性

# 類中所有雙下劃線開頭的名稱如__x都會在類定義時自動變形成:_類名__x的形式

classa(

):__n =

0 _m =

1# 可以在外部呼叫, 只是給程式設計師提示

def__init__

(self)

: self.__n =

10# _a__n

defread

(self)

:print

(self.__n)

def__write

(self)

:# _a__write

self.__n =

20print

(self.__n)

defwrite

(self)

: self.__write(

)# 可以在內部呼叫

print

(dir

(a))

a = a(

)print

(a._m)

a.read(

)# a.__write() # 無法呼叫

a.write(

)print

(a._a__n)

# 可以呼叫

a._a__write(

)# 可以呼叫

['_a__n'

,'_a__write'

,'_m'

,'__class__'

,'__delattr__'

,'__dict__'

,'__dir__'

,'__doc__'

,'__eq__'

,'__format__'

,'__ge__'

,'__getattribute__'

,'__gt__'

,'__hash__'

,'__init__'

,'__init_subclass__'

,'__le__'

,'__lt__'

,'__module__'

,'__ne__'

,'__new__'

,'__reduce__'

,'__reduce_ex__'

,'__repr__'

,'__setattr__'

,'__sizeof__'

,'__str__'

,'__subclasshook__'

,'__weakref__'

,'read'

,'write']1

1020

2020

# -*- coding:utf-8 -*-

# /usr/bin/python

class

person

: name =

"person_name"

class

student

(person)

: student_name =

'student_name'

def__init__

(self, school_name)

: self.school_name = school_name

if __name__ ==

"__main__"

: user = student(

"慕課網"

)print

(user.__dict__)

# 通過__dict__查詢屬性

print

(user.name)

# 通過user.name可以讀取到, 但是通過__dict__無法獲取的原因

# name是屬於person的屬性, 並不是student的屬性, 但是使用點的時候會向上查詢.

print

(student.__dict__)

print

(person.__dict__)

# 通過__dict__賦值

user.__dict__[

"school_addr"]=

"北京市"

print

(user.school_addr)

# 通過__dict__查詢屬性

print

(user.__dict__)

# 通過dir查詢屬性

print

(dir

(user)

)print

(dir

(student)

)print

(dir

(person)

)

Python高階 物件自省

自省 introspection 在計算機程式設計領域裡,是指在執行時來判斷乙個物件的型別的能力。它是python的強項之一。python中所有一切都是乙個物件,而且我們可以仔細勘察那些物件。python還包含了許多內建函式和模組來幫助我們。dir用於自省的最重要的函式之一。它返回乙個列表,列出了乙...

Python高階程式設計 元類程式設計

class people def init self,name self.name name property defname self return self.name name.setter defname self,value self.name value getattr 是在找不到屬性的時...

python程式設計高階

1 開閉原則 遵循開發封閉原則,雖然在這個原則是用的物件導向開發,但是也適用於函式式程式設計,簡單來說,它規定已經實現的功能 不允許被修改,但可以被擴充套件,即 封閉 已實現的功能 塊 開放 對擴充套件開發 2 可使用裝飾器實現開閉原則 裝飾器是不對原函式內部 進行修改的前提下,在外部增加一些功能,...