Python 學習筆記(十四)Python類(二)

建立簡單的類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()

類和實例

相關文章
相關標籤/搜索