Python物件導向語法筆記2_方法覆寫Override、方法多載Overloading、私有成員會前面多兩個底線
方法覆寫Override
程式1-原本子類別方法呼叫
class Parent: def myMethod(self): print("父類別方法") class Child(Parent): def myMethod(self): print("子類別方法") c = Child() c.myMethod()
程式2-方法覆寫Override
super(子類別,self).同名方法
class Parent: def myMethod(self): print("父類別方法") class Child(Parent): def myMethod(self): print("子類別方法") super(Child,self).myMethod() c = Child() c.myMethod()
- 在python程式語言中,加減乘除四則運算子皆可用於預設變數、list的資料型別,但是如果是兩個自訂物件要進行運算,就勢必要重新定義這些運算子,不然就會發生不如預期的錯誤。
- 除了算術運算以外,比如要針對物件之間的比較運算、邏輯運算也都需要進行overloading。
- 固定覆寫寫法要留意,是以下這些制式化方法名稱
以下是一個簡單的二維點座標案例
TypeError: unsupported operand type(s) for +: 'Point' and 'Point'
class Point: def __init__(self,x=0,y=0): self.x = x self.y = y p1 = Point(4,3) p2 = Point(2,1) #錯誤示範 #print(p2) #print(p1+p2)
程式2-To Be
class Point: def __init__(self,x=0,y=0): self.x = x self.y = y def __str__(self): return "({0},{1})".format(self.x,self.y) def __add__(self,other): x = self.x + other.x y = self.y + other.y return Point(x,y) p1 = Point(4,3) p2 = Point(2,1) print(p2) print(p1+p2)
私有成員會前面多兩個底線
如果類別內有看到定義的成員屬性(變數、方法)名稱前面多加了__,代表屬於私有只能在類別內使用,不可以於類別外跟外部主程式流程中使用,類別內的方法中會用self.__私有成員去存取。
測試程式
class MyCounter: __privCount = 0 publicCount = 0 def count(self): self.__privCount += 1 self.publicCount += 1 print(self.__privCount) self.__printTest() def __printTest(self): print("private class method") counter = MyCounter() counter.count() counter.count() print(counter.publicCount) #以下兩個都會報錯誤 #counter.__printTest()#AttributeError: 'MyCounter' object has no attribute '__printTest' print(counter.__privCount)#AttributeError: 'MyCounter' object has no attribute '__privCount'
留言
張貼留言