Если то, что вы намереваетесь сделать, это инкапсулировать ваши данные и установить их с помощью сеттеров и получить их с помощью геттеров, то то, что вы сделали, не поможет. вы объявили _name и _index как защищенные, это не значит, что они не могут быть доступны экстенсиональным функциям, поэтому функции за пределами класса могут легко получать к ним доступ и изменять их, что делает ваши методы получения и установки бесполезными.
Однако вы можете объявить их как частные, используя одно дополнительное подчеркивание перед собой, так что ваш класс свойств будет удален, а затем класс сеттеров будет полезен, к нему больше не будут обращаться внешние функции.
class Zone:
def __init__(self,index=None,name=None):
self.__index = index
self.__name = name
def index(self, index):
self.__index = index
def name(self, name):
self.__name = name
def get_name(self):
return self.__name
zone=Zone()
zone.name('ben')
print(zone.get_name())
>>>ben
print(zone.__name)
>>> AttributeError: 'Zone' object has no attribute '__name'