例項方法 靜態方法 類方法
私有屬性
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 可使用裝飾器實現開閉原則 裝飾器是不對原函式內部 進行修改的前提下,在外部增加一些功能,...