Если вы хотите сделать это только для одного списка вашего экземпляра класса, вы можете сделать это способом с помощью методов __set_item__
и __get_item__
dunder класса:
class Data:
def __init__(self):
self._arr = [0, 1, 2]
@property
def arr(self):
return self._arr
@arr.setter
def arr(self, value):
print("new inner list set")
self._arr = value
def __setitem__(self, key, value):
print("new value set")
self._arr[key] = value
def __getitem__(self, key):
return self._arr[key]
data = Data()
print(data.arr)
data[2] = 5
print(data.arr)
data.arr = [42, 43]
print(data.arr)
Вывод:
[0, 1, 2]
new value set # by data[2] = 5 using __set_item__
[0, 1, 5]
new inner list set # by data.arr = [42, 43] using @arr.setter
[42, 43]
Это будет работать только для одного члена списка, потому что __set_item__
работают с самим экземпляром класса, а не со списком, который является членом экземпляра класса .