Я одурачен тем, что, по моему мнению, является очень простым и прямым подклассом списка в 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 - назначение перепроверяет имя и никогда не изменяет объект, к которому в настоящее время привязано имя. –
@Cat Plus Plus: Да, я подозревал это и понимаю. Можно переназначить список подклассов или использовать синтаксис среза? Я просто не знаю, как и не могу найти через goggle или Python docs. Я еще немного зеленый на классах Python ... – dawg
Это зависит от того, что вы ожидаете от «переназначения». –