1.類與例項
類與例項互相關聯,類是例項的物件,而例項是真正的實物,他存放了類中所定義的物件的具體資訊
建立乙個類
class
mynewobject
(object):
class_suite
object是所有類之母,如果你的類沒有繼承任何其他的父類,object將作為預設的父類。它位於所有類繼承結構的最上層。如果你沒有繼承直接或者間接子類化乙個物件,那麼我們就定義了乙個經典類(不建議使用經典類)
class
mynewobject:
class_suite
例項化
先建立乙個類
class
myfirst
(object):
pass
#例項化這個類
obj=myfirst()
#關於類作為命名空間容器
>>> obj.x=4
>>> obj.y=5
>>> obj.y+obj.x
9>>>
"在這裡例項名字obj將obj.x與obj.y關聯起來,這就是我們所說的使用類作為名字空間容器。obj.x與obj.y是例項屬性,並不是類myfirst的屬性,是obj例項物件的獨有屬性。"
2.方法
類的功能有乙個更加通俗的名字叫做方法,在python中,方法定義在類定義中,但只能被例項所呼叫。
class
myclass
(object):
#定義類
defprintfoo
(self):
#定義方法
print
"you win"
"對於seld引數,他在所有的方法宣告中都存在,這個引數代表例項物件本身,當你用例項呼叫方法的時候,由直譯器悄悄的傳遞給方法,你不需要自己傳遞self進來,因為他是自動傳人的。在其他的語言中self被稱為「this」 一般的方法會需要這個例項,而靜態方法或者類方法就不需要,其中類方法需要的是類而不是例項"
#例項化類,建立乙個物件
obj=myclass()
obj.printfoo()
*******output*******
you win
3.建立乙個類class
mynewobject
(object):
def__init__
(self,name,phone):
self.name=name
self.phone=phone
print
"created instance for:",self.name
defupdatephone
(self,newphone):
self.phone=newphone
print
"update phone %s for %s"%(self.phone,self.name)
#例項化
obj=mynewobject('cmustard',12345676)
***********output************
created instance for: cmustard
#方法呼叫更新
obj.updatephone(2345235235)
***********output************
update phone 2345235235
for cmustard
#訪問例項屬性
print obj.name
print obj.phone
***********output************
cmustard
2345235235
在這個類中定義了兩個方法__init__
和updatephone.__init__()
類似於類構造器,他在建立乙個新的物件時被呼叫,在例項化的過程中,呼叫__init__()
方法,當乙個類被例項化時,就可以定義額外的行為,比如設定初始值等等。
4.建立和使用子類
class
newclass
(mynewobject):
def__init__
(self,name,phone,id,email):
mynewobject.__init__(self,name,phone)
self.id=id
self.email=email
defupdateemail
(self,newemail):
self.email=newemail
print
"update e-mail address for ",self.name
"我們建立了乙個mynewobject的乙個子類,這個新的類,不僅繼承了父類的updatephone方法,還增加了updateemail方法"
"注意,這裡我們要顯示傳遞self例項物件給基類構造器,因為我們不是在在例項中而是在乙個子類例項中呼叫哪個方法。只是因為我們不是通過例項來呼叫它,這種未繫結的方法呼叫需要傳遞乙個適當的例項(self)給他"
>>> cmustard=newclass('cmustard','400-820-8820',3345,'[email protected]')
created instance for: cmustard
>>>
print cmustard
<__main__.newclass object at>
>>> cmustard.name='mustard'
>>> cmustard.name
'mustard'
>>> cmustard.updatephone('400-110-3345')
update phone 400-110-3345
for mustard
>>> cmustard.email
>>> cmustard.updateemail('[email protected]')
update e-mail address for mustard
>>> cmustard.email
>>>
>>> cmustard.id
3345
>>>
4.常用術語
1.抽象/實現
抽象指對現實世界問題和實體的本質表現,行為和特徵建模,建立乙個相關的子集,可以用於描繪程式結構從而實現這種模型。
2.封裝/介面
3.合成
合成擴充了對類的描述,是得對個不同的類合成為乙個大的類,來解決現實問題,。合成描述了乙個異常複雜的系統,比如乙個類有其他類組成,更小的元件也有可能是其他類,資料屬性及行為,所有這些合在一起,彼此是「有乙個」的關係。
4.派生/繼承/繼承結構
5.泛華/特化
泛華表示所有子類與其父類及祖先類有一樣的特點,所有子類可以認為同祖先類是「是乙個」關係,因為乙個派生物件是乙個祖先類的例子。
6.多型
多型表明了動態(後來又稱為執行時)繫結的存在,允許過載以及執行時型別確定和驗證
Python class類轉字典
有時候會需要從包裝的類裡面取出需要的資料,但有不能直接取出來 可以通過如下 把class轉換成字典 將class轉dict,以 開頭的也要 defprops with obj pr for name in dir obj value getattr obj,name ifnot name.start...
Python class 類 裝飾器
class father def init self,name self.name name print name s self.name defgetname self return father self.name class son father def getname self return...
Python Class專題 二 類的方法
每日一語 每一次相遇,都是靈魂在共鳴!小亮的部落格 2019.5.19於北洋 在類的內部,使用 def 關鍵字來定義乙個方法,與一般函式定義不同,類方法必須包含引數 self,且為第乙個引數,self 代表的是類的例項。usr bin python3 類定義 class people 定義基本屬性 ...