7.1_面向對象編程Object-Oriented和裝飾器decorator
1. 面向對象編程
面向對象技術簡介
類(Class):?用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。
類變量:類變量在整個實例化的對象中是公用的。類變量定義在類中且在函數體之外。類變量通常不作為實例變量使用。
數據成員:類變量或者實例變量用于處理類及其實例對象的相關的數據。
方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。
實例變量:定義在方法中的變量,只作用于當前實例的類。
繼承:即一個派生類(derived class)繼承基類(base class)的字段和方法。繼承也允許把一個派生類的對象作為一個基類對象對待。例如,有這樣一個設計:一個Dog類型的對象派生自Animal類,這是模擬"是一個(is-a)"關系(例圖,Dog是一個Animal)。
實例化:創建一個類的實例,類的具體對象。
方法:類中定義的函數。
對象:通過類定義的數據結構實例。對象包括兩個數據成員(類變量和實例變量)和方法。
Python支持面向對象編程
類(class):現實世界中一些事物的封裝 (如:學生)
類:屬性 (如:名字,成績)
類對象
實例對象
引用:通過引用對類的屬性和方法進行操作
實例化:創建一個類的具體實例對象 (如:學生張三)
#!/usr/bin/python # -*- coding: UTF-8 -*- class Employee : ' 所有員工的基類 ' empCount = 0 def __init__ ( self , name , salary ) : self . name = name self . salary = salary Employee . empCount += 1 def displayCount ( self ) : print " Total Employee %d " % Employee . empCount def displayEmployee ( self ) : print " Name : " , self . name , " , Salary: " , self . salary
empCount 變量是一個類變量,它的值將在這個類的所有實例之間共享。你可以在內部類或外部類使用 Employee.empCount 訪問。
第一種方法__init__()方法是一種特殊的方法,被稱為類的構造函數或初始化方法,當創建了這個類的實例時就會調用該方法
self 代表類的實例,self 在定義類的方法時是必須有的,雖然在調用時不必傳入相應的參數。
self代表類的實例,而非類
類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的 第一個參數名稱 , 按照慣例它的名稱是 self。
class Test : def prt ( self ) : print ( self ) print ( self . __class__ ) t = Test () t . prt ()
以上實例執行結果為:
<__main__.Test instance at 0x10d066878>__main__.Test
從執行結果可以很明顯的看出,self 代表的是類的實例,代表當前對象的地址,而 self.class 則指向類。
self 不是 python 關鍵字,我們把他換成 runoob 也是可以正常執行的:
實例
class Test : def prt ( runoob ) : print ( runoob ) print ( runoob . __class__ ) t = Test () t . prt ()
以上實例執行結果為:
<__main__.Test instance at 0x10d066878>__main__.Test
2. 裝飾器(decorator)
Code:
#Python OO example
class Student :
def __init__ ( self , name , grade ):
self .name = name
self .grade = grade
def introduce ( self ):
print ( "hi! I'm " + self .name)
print ( "my grade is: " + str ( self .grade))
def improve ( self , amount ):
self .grade = self .grade + amount
jim = Student( "jim" , 86 )
jim.introduce()
jim.improve( 10 )
jim.introduce()
def add_candles ( cake_func ):
def insert_candles ():
return cake_func() + " candles"
return insert_candles
def make_cake ():
return "cake"
gift_func = add_candles(make_cake)
print (make_cake())
print (gift_func())
def add_candles ( cake_func ):
def insert_candles ():
return cake_func() + " candles"
return insert_candles
def make_cake ():
return "cake"
make_cake = add_candles(make_cake)
print (make_cake())
# print(gift_func))
def add_candles ( cake_func ):
def insert_candles ():
return cake_func() + " and candles"
return insert_candles
@add_candles
def make_cake ():
return "cake"
# make_cake = add_candles(make_cake)
print (make_cake())
# print(gift_func)
#修飾器
面向對象編程
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。