我正在學習學習Python第4版,我目前正在爲本書的第六部分進行練習。我目前的練習有點讓人困惑,我希望能夠得到一些關於如何解決這個問題的指導。如何通過子類來攔截操作?
下面是我正在使用的提示。
子類。在練習2中創建一個名爲MyListSub的MyList子類,該子類擴展了MyList,以便在調用每個重載操作之前將消息打印到stdout並計算調用次數。 MyListSub應該繼承MyList的基本方法行爲。向MyListSub添加序列應該會打印一條消息,爲+調用增加計數器,並執行超類的方法。另外,引入一種將操作計數器打印到stdout的新方法,並交互式地對您的類進行實驗。你的計數器是否按每個實例或每個類(針對該類的所有實例)計數調用?你將如何編程其他選項)? (提示:這取決於哪個對象計數成員被分配到:類成員被實例共享,而是自我成員是每個實例的數據。)
所以部分,我真正感興趣的,現在是
從練習2中創建一個名爲MyListSub的MyList的子類,它擴展了MyList以在調用每個重載操作之前將消息打印到stdout並計算調用次數。
我可以在這裏看到DRY的良好用法,它可以一石激起我的所有鳥類。但我不知道如何實現它。 我知道我應該做的是實現某種攔截操作,增加計數器並打印消息的方法。但我不知道如何去做最好的事情。我的基本想法是一樣的東西
def count_ops(self, op_count):
# intercept calls to operator overloading methods
op_count += 1
print 'Number of calls to operator {0}: {1}'.format(oper, op_count)
(注:這不是我一直沒有寫代碼,這是邊界僞突出什麼,我想做的事情。)
我能得到一些幫助這裏?請不要直接給我答案,我想弄明白這一點,提示遠遠超出答案。 :)
我已經有了這樣的解決方案,我希望進一步解耦它,這樣我就不必在每個重載的方法中加入一些東西。 – wldcordeiro
你可以用類裝飾器來做到這一點。 – unutbu