Python基础(4):类
類的定義
定義類成員函數時,必須帶有self參數,通過這個參數訪問類的對象實例(object instance)。
類的定義,其實就是定義了代碼塊。這個代碼塊中可以定義變量、函數,也可以定義語句。
類的成員變量是public,使用雙下劃線開頭命名的變量,為private類型(這只是一種convention,其實還是可以通過其它方式訪問,Python中沒有絕對的private訪問控制)。
在類中定義變量的時候,要區分:
- class varialbe -- 在類中定義,被所有實例共享
- instance variable -- 在類的初始化函數中定義
下面兩種調用方式是相同的:
- dog.getcolor(d)
- d.getcolor()
>>> class dog:
???????? m_color = "red"
???????? def shout(self, words):
?????????????????? print("a dog is saying:", words)
???????? def setcolor(self, color):
?????????????????? self.m_color = color
???????? def getcolor(self):
?????????????????? print("color is:", self.m_color)?????????????????
>>> d = dog()
>>> d.getcolor()
color is: red
>>> d.setcolor("yellow")
>>> d.getcolor()
color is: yellow
>>>
繼承
格式:class suclassname(superclassname)
對 overrided 的函數,總是采用動態綁定的方式。如果要實現靜態綁定調用,需要使用 name mangle 機制。
如果多個超類中定義了相同的方法,先繼承的那個類中定義的生效。
?
>>> class homedog(dog):
???????? def shout(self, words):
?????????????????? print("it is a homedog")?????????????????
>>> hd = homedog()
>>> hd.shout("home")
it is a homedog
>>>
類相關函數
Issubclass()
Isinstance()
Hasattr()
Getattr()
Setattr()
?
Class.__bases__
Class.__class__
Class.__dict__
?
>>> issubclass(homedog, dog)
True
>>> homedog.__bases__
(<class '__main__.dog'>,)
>>> isinstance(hd, homedog)
True
>>> hd.__class__
<class '__main__.homedog'>
?
>>> hasattr(d, "m_color")
True
>>> hasattr(d, "m_eye")
False
>>> getattr(d, "m_color")
'red'
>>> setattr(d, "m_color", "green")
>>> getattr(d, "m_color")
'green'
?Iterator
class必須支持__iter__()函數,返回一個iterator對象,這個對象有next()方法。遇到結束時,返回異常 StopIterator。
一種更快捷的支持iterator的辦法是使用 yield,yield() 自動處理上面的函數,保存局部變量。轉載于:https://www.cnblogs.com/weichsel/archive/2012/03/04/2379667.html
總結
以上是生活随笔為你收集整理的Python基础(4):类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一名普通程序员的自我诊断书
- 下一篇: 数据结构基础(7) --循环队列的设计