一、oop
oop就是**的重用,通過分解**,最小化**的冗餘以及對現存的**進行定製來編寫程式;oop模型中有兩種物件,類物件和例項物件。類物件提供預設行為,是生產例項物件的工廠;類物件和例項物件都有各自命名空間。
二、python類的主要特性
• class語句建立類物件並將其賦值給變數名
• class語句內的頂層賦值語句會建立類的屬性
• 類屬性提供物件的狀態和行為
三、python例項物件的主要特性
• 每次類呼叫時,都會建立並返回新的例項物件
• 每個例項物件繼承類的屬性並獲得了自己的命名空間
• 每個例項物件通過構造方法獲得每個例項自己的屬性
四、建立類和例項物件-類的封裝
封裝,是將物件的資料與運算元據的方法相結合,通過方法將物件的資料與實現細節保護起來,就稱為封裝。外界只能通過物件的方法訪問物件,因此封裝同時也實現了物件的資料隱藏
class person():
#類的屬性--靜態屬性
country="china"
#封裝--初始化方法
def __init__(self,*args):
self.name=args[0]
self.age=args[1]
self.aggr=args[2]
self.***=args[3]
#方法def walk(self,n):
print("%szoule%sbu"%(self.name,n))
#呼叫類建立例項物件,自動執行構造方法__init__
jonny=person('jonny',11,23,'man')
#例項物件呼叫類的方法
jonny.walk(10)
#例項物件呼叫類的屬性
print(jonny.country)
五、類的繼承
單繼承類可以通過繼承進行定製;類的繼承豐富了軟體的層級,在層級較低的地方覆蓋現有的屬性,讓其行為特定化。
在python中,例項物件從類中繼承,而類繼承於超類
• 超類寫在類開頭的括號中
• 類從其超類中繼承屬性
• 例項會繼承所有可讀取類的屬性
• 每次例項物件的屬性呼叫都會進行類樹搜尋
• 邏輯的修改是通過建立子類,而不是修改超類
#建立父類---經典類
class a():
a1="11"
#建立子類,繼承父類a
class b(a):
b1="22"
#呼叫父類的屬性
print(b.a1)
以上的例子中父類是經典類,因為父類未繼承object類;繼承object類的父類是新式類
#建立父類---新式類
class a(object):
a1="11"
#建立子類,繼承父類a
class b(a):
b1="22"
#呼叫父類的屬性
print(b.a1)
在繼承中,父類是經典類那麼子類就是經典類;父類是新式類,子類就是新式類
多繼承python支援繼承多個類,那麼在繼承父類的屬性和方法時改怎麼找呢?
class d(object):
def display(self):
print('d.display')
class c(d):
def display(self):
print('c.display')
class b(d):
def display(self):
print('b.display')
class a(b,c):
def display(self):
print('a.display')
a=a()
a.display()
執行display方法時,查詢順序為 a--b--c--d
六、類的多型
類的多型性是指具有不同功能的函式可以使用相同的函式名,這樣就可以用乙個函式名呼叫不同內容的函式。
class person():
def display(self):
pass
class man(person):
def display(self):
print("man")
class woman(person):
def display(self):
print("woman")
def func(obj):
obj.display()
#例項化物件
man1=man()
woman1=woman()
#多型func(man1)
func(woman1)
標籤:display,self,class,物件,例項,父類,print
Python 命名空間
本文介紹python中命名空間中的legb原則。legb含 釋 l local function 函式內的名字空間,包括區域性變數和形參 e enclosing function locals 外部巢狀函式的名字空間 例如closure g global module 函式定義所在模組 檔案 的名字...
python 命名空間
作用域 第五章說過,將輸入字元作為命令放在作用域字典裡 作用域,每個函式都有乙個作用域,就是 字典,字典名字為函式名,鍵為變數,鍵值為變數對應的賦值。函式的作用域為區域性作用域 在函式內部訪問全域性變數,且只是讀取變數的值不重新繫結變數。這樣引用易出錯誤。慎重使用全域性變數 defcombine p...
python命名空間
區域性命名空間下def foo a a if name main foo 報錯資訊 unboundlocalerror local variable a referenced before assignment 全域性命名空間下if name main b b報錯資訊 nameerror name ...