2013-09-21 43 views
0

在Python中,是否可以向內置類(如Tuple)添加新方法。我想添加2種新的方法:先將()返回一個元組的第一個元素,和第二()返回一個新的元組沒有第一元件。Python:是否可以向Tuple類添加新方法

因此,例如:

x = (1, 2, 3) 

x.first() # 1 
x.second() # (2, 3) 

感謝

+4

不,你必須創建自己的類。 (你可以對元組進行子類化)。 – BrenBarn

+1

爲什麼不分片元組?第一個是't [0]',第二個是't [1:]'。 –

+0

因此python類是封閉的,不能像Ruby或C#那樣擴展。那是對的嗎?我是python的新手,所以只想知道可以做什麼和不可以做什麼。能夠在不改變默認行爲的情況下擴展現有類可能非常有用。一個例子是LINQ主要通過擴展方法實現。在C(這是大多數內置類真)來實現 – user1797036

回答

3

號你可以使用一個namedtuple引進各崗位名稱;或者你可以繼承元組;或者你可以簡單地編寫函數。功能沒有任何問題。

但是,絕對沒有一個是好主意。最好的想法就是像其他人一樣編寫代碼:使用下標和切片。這些都是完全清楚的,並且每個人都知道。

最後,你的名字具有高度的誤導性:首先返回第一個元素;第二個返回由第二個和第三個元素組成的元組。

+2

另一方面,如果方法被稱爲'car()'和'cdr()'...... –

+0

@ IgnacioVazquez-Abrams我對此感覺好多了。 – Marcin

+0

或者更直接地說,'second'只返回第一個元素。 –

3

,但是不要

存在一個dark and dangerous forbiddenfruit,不安全和危險地允許這樣的事情。但這是一個黑暗的地方。

相反,你可以做一個新的類:

class MyTuple(tuple): 
    def first(self): 
     return self[0] 

    def second(self): 
     return self[1:] 

mt = MyTuple((1, 2, 3, 4)) 

mt.first() 
#>>> 1 
mt.second() 
#>>> (2, 3, 4) 

最好,你可以創建一個實際的鏈表調用這個不需要複製每次。

最好不要這麼做,因爲幾乎沒有任何情況需要Python中的自我實現或單鏈表。

+0

這是一樣的我的回答,並BrenBarn的評論,只是到了後來,和更少的解釋。 – Marcin

+0

Python有一個標準的鏈接數據結構:'deque' – Marcin

+0

你不包括實際修改內置類,不過,我認爲是一個相關的(如果不是很有用)的補充。 – Veedrac

相關問題