Я думаю, это зависит от того, что такое v
, и если вы можете редактировать код, определяющий класс f
:
Для случая, когда v
является целым числом, и вы можете редактировать код класса `f, это, безусловно, возможно:
class alist(object):
def __init__(self):
self.L = list()
def append(self, v):
self.L.append(v)
def increase(self, k, i):
self.L[k] += i
def __getitem__(self, k):
return self.L[k]
def __setitem__(self, k, v):
self.L[k] = v
a = alist()
a.append(8)
a.append(1)
a.append(15)
a.append(57)
print "List contains: ", a.L
print "This should be eight: ", a.get(0)
# Increase using the increase method
a.increase(0,2)
print "This should be ten: ", a.get(0)
print "This should be ten: ", a[0]
# Increment using the [] getitem shortcut
a[0] += 2
print "This should be twelve: ", a.get(0)
print "This should be twelve: ", a[0]
print "List contains: ", a.L
Который отображает:
List contains: [8, 1, 15, 57]
This should be eight: 8
This should be ten: 10
This should be ten: 10
This should be twelve: 12
This should be twelve: 12
List contains: [12, 1, 15, 57]
Нет необходимости в переносе в прокси-класс, нет необходимости определять __iadd__
, так как он уже определен для целых чисел. Теперь, если вы работаете с каким-то другим типом данных элемента (например, с пользовательским объектом), вам может потребоваться определить __iadd__
.