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()


方法多載Overloading

  • 在python程式語言中,加減乘除四則運算子皆可用於預設變數、list的資料型別,但是如果是兩個自訂物件要進行運算,就勢必要重新定義這些運算子,不然就會發生不如預期的錯誤。
  • 除了算術運算以外,比如要針對物件之間的比較運算、邏輯運算也都需要進行overloading。
  • 固定覆寫寫法要留意,是以下這些制式化方法名稱


以下是一個簡單的二維點座標案例
TypeError: unsupported operand type(s) for +: 'Point' and 'Point'

另外像是要打印點座標直接print也會直接印出記憶體位置

程式1-As If


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'
















留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

外貿Payment Term 付款條件(方式)常見的英文縮寫與定義

鼎新ERP_會計系統_總帳管理_財務參數設定_傳票處理