在Python中,是否可以向內置類(如Tuple)添加新方法。我想添加2種新的方法:先將()返回一個元組的第一個元素,和第二()返回一個新的元組沒有第一元件。Python:是否可以向Tuple類添加新方法
因此,例如:
x = (1, 2, 3)
x.first() # 1
x.second() # (2, 3)
感謝
在Python中,是否可以向內置類(如Tuple)添加新方法。我想添加2種新的方法:先將()返回一個元組的第一個元素,和第二()返回一個新的元組沒有第一元件。Python:是否可以向Tuple類添加新方法
因此,例如:
x = (1, 2, 3)
x.first() # 1
x.second() # (2, 3)
感謝
號你可以使用一個namedtuple
引進各崗位名稱;或者你可以繼承元組;或者你可以簡單地編寫函數。功能沒有任何問題。
但是,絕對沒有一個是好主意。最好的想法就是像其他人一樣編寫代碼:使用下標和切片。這些都是完全清楚的,並且每個人都知道。
最後,你的名字具有高度的誤導性:首先返回第一個元素;第二個返回由第二個和第三個元素組成的元組。
另一方面,如果方法被稱爲'car()'和'cdr()'...... –
@ IgnacioVazquez-Abrams我對此感覺好多了。 – Marcin
或者更直接地說,'second'只返回第一個元素。 –
是,但是不要。
存在一個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中的自我實現或單鏈表。
不,你必須創建自己的類。 (你可以對元組進行子類化)。 – BrenBarn
爲什麼不分片元組?第一個是't [0]',第二個是't [1:]'。 –
因此python類是封閉的,不能像Ruby或C#那樣擴展。那是對的嗎?我是python的新手,所以只想知道可以做什麼和不可以做什麼。能夠在不改變默認行爲的情況下擴展現有類可能非常有用。一個例子是LINQ主要通過擴展方法實現。在C(這是大多數內置類真)來實現 – user1797036