建立簡單的類python
新式類和經典類(舊式類)算法
Python 2.x中默認都是經典類,只有顯式繼承了object纔是新式類函數
Python 3.x中默認都是新式類,經典類被移除,沒必要顯式的繼承objectspa
新式類都從object繼承,經典類不須要code
新式類的MRO(method resolution order 基類搜索順序)算法採用C3算法廣度優先搜索,而舊式類的MRO算法是採用深度優先搜索orm
新式類相同父類只執行一次構造函數,經典類重複執行屢次對象
截止到python2.1,只存在舊式類。舊式類中,類名和type是無關的:若是x是一箇舊式類,那麼x.__class__定義了x的類名,可是type(x)老是返回<type 'instance'>。這反映了全部的舊式類的實例是經過一個單一的叫作instance的內建類型來實現的,這是它和類不一樣的地方。blog
新式類是在python2.2爲了統一類和實例引入的。一個新式類只能由用戶自定義。若是x是一個新式類的實例,那麼type(x)和x.__class__是同樣的結果(儘管這不能獲得保證,由於新式類的實例的 __class__方法是容許被用戶覆蓋的)。繼承
1 >>> class AA: #經典類(舊式類) 2 pass 3 4 >>> aa =AA() 5 >>> type(aa) 6 <type 'instance'> 7 >>> type(AA) 8 <type 'classobj'> 9 >>> aa.__class__ 10 <class __main__.AA at 0x000000000396E348> 11 >>> class BB(object): #新式類 12 pass 13 14 >>> bb = BB() 15 >>> type(bb) 16 <class '__main__.BB'> 17 >>> bb.__class__ 18 <class '__main__.BB'> 19 >>> print aa 20 <__main__.AA instance at 0x000000000390ECC8> 21 >>> print bb 22 <__main__.BB object at 0x0000000002B00B00> 23 >>>
編寫方法utf-8
示例1:
1 #! /usr/bin/env python 2 # coding =utf-8 3 4 #一般類名首字母大寫 5 6 class Person(object): 7 h =1.8 #屬性 8 def getName(self): #定義一個方法,第一個參數必須是self,並且必須寫上,self是類的實例,而非類 9 print "My name is lily." 10 11 def color(self,col): 12 print "The sky is {0}".format(col) 13 14 15 16 p = Person() #把類實例化,p就是實例對象 17 p.getName() #調用實例裏面的方法或者屬性 18 p.color("blue") 19 print p.h 20 21 22 p.a="hello" #給對象賦了一個屬性 23 print p.a 24 25 p.h =2.8 26 print p.h
示例2:
1 #!/usr/bin/env python 2 #coding=utf-8 3 4 """ 5 地址的類PersonAddress 6 屬性 人員的姓名| 人員的EMAIL 7 方法 訪問每一個屬性|修改email地址 8 """ 9 10 class PersonAddress(object): 11 12 name ="zhangsan" 13 email="zhangsan@gmail.com" 14 15 def aboutPerson(self): #self必須寫上 16 print "NAME:",PersonAddress.name #訪問屬性 17 print "EMAIL:",PersonAddress.email 18 19 def changeEmail(self,email): 20 PersonAddress.email =email 21 22 23 24 p = PersonAddress() 25 p.aboutPerson() 26 p.changeEmail("cc@gamail.com") 27 p.aboutPerson()
類和實例