基礎知識回顧——類和對象

來源:互聯網
上載者:User

標籤:回顧   name   方式   elf   類的屬性   class   str   方法   對象   

物件導向編程是一種編程方式,最主要的特點是需要使用 "類"和 "對象" 來實現,類可以看作一個模板,模板裡可以包含很多方法,方法可以實現一些功能;對象則是建立模板的執行個體,通過執行個體對象可以執行類中的方法。

 

類

1.認識類

通常我們把“鳥類”想象成所有鳥的集合,因此“鳥類”就是一個非常抽象的類;鳥普遍能飛需要食物,因此“能飛”和“需要食物”就是這個類的屬性。再者我們不會說這是一隻鳥類,而只會說這是一隻鳥,於是“這隻鳥”便成了“鳥類”的執行個體。

 1 >>> class Bird: 2       def __init__(self): 3           self.hungry = True 4       def eat(self): 5           if self.hungry: 6               print "55555" 7               self.hungry = False 8           else: 9               print "no,thanks!"10         11 >>> b = Bird()   #b是類Bird的執行個體12 >>> b.eat()13 55555

如果說“鳥類”是一個類,那“百靈鳥”便是“鳥類”的一個子類;反言之,“鳥類”是“百靈鳥”的父類,這是一隻百靈鳥,也可以說“這隻百靈鳥”是“百靈鳥”的執行個體化。

 1 >>> class Lark(Bird): 2       def __init__(self): 3           self.sound = ‘JOJO‘ 4       def sing(self): 5           print self.sound 6       7 >>> lark = Lark() 8 >>> lark.sing 9 <bound method Lark.sing of <__main__.Lark instance at 0x03AB98A0>>10 >>> lark.sing()11 JOJO

 

2.定義子類

通常一個類的定義取決於它所支援的方法,子類可以繼承父類所有的方法;於是定義一個子類,便是一個定義更多方法(也可能是重載已經存在的方法)的過程。比如,企鵝Penguin(Bird的子類)不會fly,當建立Penguin類時,可能會想要重寫父類的fly方法,對於Penguin的執行個體來說,這個fly方法要不什麼也做不了,要不就會異常,因為企鵝不會飛。

1 >>> lark.eat()   #子類對象調用父類eat()方法2  3 Traceback (most recent call last):4      File "<pyshell#61>", line 1, in <module>5      lark.eat()6      File "<pyshell#48>", line 5, in eat7      if self.hungry:8 AttributeError: Lark instance has no attribute ‘hungry‘

調用Bird類的eat方法異常,是因為Lark類的構造方法__init__被重寫了,新的構造方法沒有初始化父類hungry屬性的代碼,正確的應該是在self.sound = ‘JOJO‘代碼前,加上Bird.__init__(self),python3.5也可以用super(Lark.self).__init__()代替。

1 >>> class Lark(Bird):2       def __init__(self):3           Bird.__init__(self)  #或者super(Lark.self).__init__()4           self.sound = ‘JOJO‘5       def sing(self):6           print self.sound7        8 >>> lark = Lark()
9 >>> lark.eat()
55555

構造方法:代表著名為init的初始化方法,和其他普通方法不同在於,當一個對象被建立後,會立即調用構造方法,用來初始化新建立對象的狀態,大多數子類不僅要用於自己的初始化代碼,還要父類的初始化代碼。

 

3. 私人方法

方法或特性若公有變為私人(從類外部無法訪問),只需要在它的名字前面加上雙底線即可。

 1 >>> class Secretive: 2       def __A(self): 3           print ‘no see‘ 4       def B(self): 5           print ‘hello,you can see me‘ 6        7 >>> s1 = Secretive() 8 >>> s1.A() 9 10 Traceback (most recent call last):11   File "<pyshell#69>", line 1, in <module>12     s1.A()13 AttributeError: Secretive instance has no attribute ‘A‘14 >>> s1.B()15 hello,you can see me

 

4.建立內建類型的子類

一般內建對象是基於類型(list,tuple,string,dic和number)的,自訂的對象則是基於類的。可以建立類但是不能建立類型。但是最新的python,基本類型和類的界限開始模糊了。

 1 >>> class CountList(List):      #定義一個帶訪問計數的列表 2       def __init__(self,*args): 3           super(CountList,self).__init__(*args)    #python2.7不可以用super直接調用自身,獲得父類方法,只能用List__init__(self):代替 4           self.counter = 0 5       def __getitem__(self,index): 6           self.count += 1 7           return super(CountList,self).__getitem__(index)  8  9 10 >>> c1 = CounterList(range(5))11 [1,2,3,4,5]12 >>> c1.counter13 014 >>>c1[2] +c1[3]15 716 >>>c1.counter17 2

 

對象

在Python中一切皆對象,對象(object)基本上可以看作資料(屬性)以及操作這些資料的方法組成的集合。對象的特點:

a.多態:意味著可以對不同類的對象使用相同的操作,很多函數和運算子都是多態的

1 >>> def add(x,y):2       return x + y3 4 >>> add(1,2)5 36 >>> add(‘abc‘,‘ef‘)7 ‘abcef‘

b.封裝:把類所需要的資料(類的屬性)和對資料的操作(類的方法)全部都寫進類的過程,簡化編程,對外部隱藏內部工作細節。

 1 >>> class Person: 2       def __init__(self): 3           self.name = ‘ann‘      4 >>> p1 = Person() 5 >>> p1.name 6 ‘ann‘ 7 >>> p1.name = ‘Ryana‘ 8 >>> p1.name 9 ‘Ryana‘10 11 >>> p2 = Person()12 >>> p2.name13 ‘ann‘14 #建立不同的對象p1和p2,名字不同說明對象都有自己的狀態,對象的狀態由它的屬性(eg:name)來描述,對象的方法可以改變它的屬性

c.繼承:繼承是兩個類或者多個類之間的父子關係,實現了代碼的重用,通過父類為基礎建立專門的類對象,以達到調用更多方法的目的。檢查繼承,issubclass(A,B):A類是否是B類的子類,isinstance(a,A):對象a是否是類A的執行個體

1 >>> issubclass(Lark,Bird)2 True3 >>> issubclass(Bird,Lark)4 False5 6 >>> isinstance(lark,Lark)7 True8 >>> isinstance(lark,Bird)9 True

 

基礎知識回顧——類和對象

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.