我對我認爲Python是一個非常簡單直接的列表子類感到困惑。在Python中創建一個列表子類。爲什麼切片和空列表不起作用?
假設我想要列表的所有功能。我想將幾種方法添加到列表的默認設置中。
下面是一個例子:
class Mylist(list):
def cm1(self):
self[0]=10
def cm2(self):
for i,v in enumerate(self):
self[i]=self[i]+10
def cm3(self):
self=[]
def cm4(self):
self=self[::-1]
def cm5(self):
self=[1,2,3,4,5]
ml=Mylist([1,2,3,4])
ml.append(5)
print "ml, an instance of Mylist: ",ml
ml.cm1()
print "cm1() works: ",ml
ml.cm2()
print "cm2() works: ",ml
ml.cm3()
print "cm3() does NOT work as expected: ",ml
ml.cm4()
print "cm4() does NOT work as expected: ",ml
ml.cm5()
print "cm5() does NOT work as expected: ",ml
輸出:
Mylist: [1, 2, 3, 4, 5]
cm1() works: [10, 2, 3, 4, 5]
cm2() works: [20, 12, 13, 14, 15]
cm3() does NOT work as expected: [20, 12, 13, 14, 15]
cm4() does NOT work as expected: [20, 12, 13, 14, 15]
cm5() does NOT work as expected: [20, 12, 13, 14, 15]
如此看來,一個標量分配工作,我期望和理解。根據我的理解,列表或切片不起作用。由'不起作用',我的意思是方法中的代碼不會像前兩種方法那樣更改ml的實例。
我該怎麼做才能使cm3()
cm4()
和cm5()
工作?
它不是具體到列表中。這就是名稱和賦值如何在Python中工作 - 賦值重新綁定名稱,並且永遠不會修改名稱當前綁定的對象。 – 2012-02-27 03:24:57
@Cat Plus Plus:是的,我懷疑並理解。當然,可以重新分配一個子類列表或使用分片語法?我只是不知道如何通過護目鏡或Python文檔找不到。我仍然對Python類有點綠色...... – dawg 2012-02-27 03:30:06
這取決於你期望「重新分配」的含義。 – 2012-02-27 07:53:54