Czy możliwe jest przeciążenie [] (__getitem__)
metod operatora i łańcucha Pythona przy użyciu początkowego odwołania do pamięci.Przeciążenie [] Operator python i metody łączenia za pomocą odwołania do pamięci
Wyobraź Mam klasy Math
który akceptuje listę liczb całkowitych, tak:
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
I chcę zrobić coś takiego:
instance = Math(1,2,3,4,5)
instance[2:4].add_one()
Po wykonaniu tego kodu instance.list
powinny być [1,2,4,5,5]
, czy to możliwe?
Wiem, że mógłbym zrobić coś takiego jak add_one(2,4)
, ale nie jest to styl API, który chciałbym mieć, jeśli to możliwe.
Dzięki
'xrange (* self.slice.indices (len (self.math.list)))' czuje się okropnie unpythonic. Czy istnieje lepszy sposób? – Eric
Również mieszacie 'self.fields' i' self.list' – Eric
@Eric: usunąłem niepotrzebny Math.add_one, i tak, że xrange (* ...) wydaje się okropnie kłopotliwe, ale nie wiem krótszy sposób. –