Es posible sobrecargar [] (__getitem__)
el operador Python y los métodos de cadena utilizando la referencia de memoria inicial.Sobrecarga [] Operador python y métodos de encadenamiento que utilizan una referencia de memoria
imaginar que tienen una clase Math
que acepta una lista de números enteros, como esto:
class Math(object):
def __init__(self, *args, **kwargs):
assert(all([isinstance(item, int) for item in list(args)]))
self.list = list(args)
def add_one(self):
for index in range(len(self.list)):
self.list[index] += 1
y quiero hacer algo como esto:
instance = Math(1,2,3,4,5)
instance[2:4].add_one()
Después de ejecutar este código instance.list
debe ser [1,2,4,5,5]
, ¿es esto posible?
Sé que podría hacer algo como add_one(2,4)
, pero este no es el estilo de API que me gustaría tener si es posible.
Gracias
'xrange (* self.slice.indices (len (self.math.list)))' se siente terriblemente antiponético. ¿Hay una mejor manera? – Eric
Además, está mezclando 'self.fields' y' self.list' – Eric
@Eric: eliminé el Math.add_one innecesario, y sí que el xrange (* ...) parece muy engorroso, pero no sé una forma más corta. –