說我要繼承Python的set
改變difference
方法,像這樣:製作父類的方法返回子類的實例
class my_set(set):
def difference(self, ls):
ls.append(1)
return super().difference(ls)
現在假設我還添加了my_method
到my_set
,我希望把它從產生的集主叫difference
:
my_instance = my_set([1,2,3])
my_instance.difference([2,3]).my_method()
上面將無法工作,因爲從差分方法返回的組將不my_set
類型的,但邊條的r set
。什麼是pythonic方式來回避,而不必每次都通過my_set(my_instance.difference([2,3])).my_method()
轉換返回的設置?
編輯
我才意識到我可以換返回設置像return my_set(super().difference(ls))
。在此之前沒有看到,所以不知道這是否是實現我想要的正確方式。謹慎評論?
你將不得不重寫'difference'你的子類,所以它明確地調用父類的方法和包裹結果。 – BrenBarn 2015-01-09 22:00:28
使用'return my_set(super()。difference(ls))'不會使父類方法做任何不同的事情,它會改變你的子類的功能。 – martineau 2015-01-09 22:19:37
有趣的是,'return super(my_set,self).difference(lh)'返回python 2.x中的my_set對象,但不是3.x. – tdelaney 2015-01-09 22:23:31