Python中的多型與繼承
阿新 • • 發佈:2019-02-05
Python能夠實現與C++/Java等面向物件程式設計的多型與繼承方法。
Python的所有方法都是虛擬的,如果重新實現基類中的一個方法,則該重新實現的方法則會是被呼叫的方法。
1. 建立基類 Item
class Item(object):
def __init__(self, artist, title, year=None):
self._artist=artist
self._title=title
self._year=year
2.在基類函式中需要有建立存取器(accessor):
3、建立類中的其他方法:def artist(self): return self._artist def setAtist(self,artist): self._artist=artist def title(self): return self._title def setTitle(self,title): self._title=title def year(self): return self._year def setYear(self,year): self._year=year
def _str_(self):
year=""
if self._year is not None:
year="in %d" %self._year
return "%s %s by %s" % (self._artist ,self._title, self._year)
4、建立基類Item的一個子類Painting:
在子類Painting中還沒有其他的資料屬性或者新的方法,super作為其中的一個內建函式,可以用來初始化Item的資料與方法。super()函式帶有一個類,並可以返回該類的基類。如果基類函式中沒有資料需要進行初始化,則不需要呼叫super函式。class Painting(Item): def __init__(self ,artist, title, year): super(Painting,self).__init__(artist, title, year)
5、繼續建立一個更加複雜的子類Sculpture
在Sculpture中建立了一個額外的屬性material。在_str_方法中呼叫了基類的方法。在呼叫基類方法時_str_()中不能新增self否則,程式將會不斷重複遞迴呼叫_str_()函式。這麼使用保證了函式一定能夠呼叫到_str_函式,這也是有Python的多型性決定的。class Sculpture(Item): def __init__(self, artist, title, year=None, material=None): super(Sculpture, self).__init__(artist, title, year) self._material=material def _str_(self): materialSring="" if self._material is not None: materialSring="in %s" %self._material return "%s %s by %s" % (super(Sculpture, self)._str_(),materialSring)