Ist es möglich, [] (__getitem__)
Python-Operator- und -Kettenmethoden mit der ursprünglichen Speicherreferenz zu überladen.Überladen [] Python-Operator- und Verkettungsmethoden unter Verwendung einer Speicherreferenz
Imagine habe ich eine Klasse Math
, die eine Liste von ganzen Zahlen akzeptiert, wie folgt aus:
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
Und ich möchte etwas tun:
instance = Math(1,2,3,4,5)
instance[2:4].add_one()
Nach Ausführen dieses Code instance.list
sollte be [1,2,4,5,5]
, ist das möglich?
Ich weiß, ich könnte etwas wie add_one(2,4)
tun, aber das ist nicht der Stil der API, die ich gerne hätte, wenn möglich.
Danke
'xrange (* self.slice.indices (len (self.math.list)))' fühlt sich schrecklich unpythonisch an. Gibt es einen besseren Weg? – Eric
Sie mischen auch 'self.fields' und' self.list' – Eric
@Eric: Ich entfernte die nicht benötigte Math.add_one, und ja, dass Xrange (* ...) scheint schrecklich umständlich, aber ich weiß es nicht ein kürzerer Weg. –