ich eine Klasse wie unten machen:Wie die Scheibe Funktionalität der Liste in seiner abgeleiteten Klasse außer Kraft zu setzen
class MyList(list):
def __init__(self, lst):
self.list = lst
Ich möchte Scheibe Funktionalität in MyList
ich eine Klasse wie unten machen:Wie die Scheibe Funktionalität der Liste in seiner abgeleiteten Klasse außer Kraft zu setzen
class MyList(list):
def __init__(self, lst):
self.list = lst
Ich möchte Scheibe Funktionalität in MyList
Sie müssen außer Kraft gesetzt werden, um benutzerdefinierte __getitem__()
, bieten __setitem__
und __delitem__
Haken.
Diese sind eine slice object beim Schneiden der Liste übergeben; diese haben start
, stop
und step
Attribute (die None
sein könnte):
def __getitem__(self, key):
if isinstance(key, slice):
return [self.list[i] for i in xrange(key.start, key.stop, key.step)]
return self.list[key]
oder für Ihren Fall:
def __getitem__(self, key):
return self.list[key]
weil ein list
kann nehmen Sie die slice
Objekt direkt.
In Python 2, list.__getslice__
wird für Slices ohne Schritt (also nur starten und stoppen Indizes), wenn implementiert, und der integrierte list
Typ implementiert es so, dass Sie dies auch überschreiben müssen; eine einfache Übertragung auf Ihre __getitem__
Methode gut tun sollte:
def __getslice__(self, i, j):
return self.__getitem__(slice(i, j))
class MyList(list):
def __init__(self, lst):
self.list = lst
macht nicht viel Sinn machen ... self
ist die Liste Objekt selbst, und es hat zu diesem Zeitpunkt bereits erstellt worden ist, vielleicht möchten Sie zu überschreiben __new__
, aber Sie müssen wahrscheinlich nicht berühren. Auf jeden Fall wollen Sie __getitem__
wie so außer Kraft zu setzen:
def __getitem__(self, val):
if isinstance(val, slice):
# do stuff here
prüfen dies: http://stackoverflow.com/questions/2936863/python-implementing-slicing-in-getitem –
http://stackoverflow.com/questions/ 1957780/python-overloading-the-operator-getitem-methode ... als ich zum Schließen gehen wollte, habe ich den falschen Grund falsch gewählt ... sollte als ein Duplikat von diesem sein. –