Доброго времени суток!
Сейчас у меня около 10 вечера и то ли у меня мозг перестал работать, то ли я что-то пропустил.
Решил я для тренировки написать класс на Python и возник диссонанс. При определении свойства, что бы сработал сеттер, модификатор доступа для него должен быть публичным, а с приватным не срабатывает.
Наткнулся на несколько
статью раз (пункт аннотации свойств) и
статью два (пункт свойства), где я и брал информацию.
И собственно, проблема в чем.
Код весь мой, прошу не ругать за его качество написания.
Код 1, где ложное значение проходит:
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
def __str__(self):
return f'This car is {self.make.title()} {self.model.title()} from {self.year}'
class ElectricCar(Car):
def __init__(self, make, model, year, battery_capacity):
super().__init__(make, model, year)
self.__bat_capacity = battery_capacity #воть тут проблема в __
@property
def bat_capacity(self):
return self.__bat_capacity
@bat_capacity.setter
def bat_capacity(self, value):
if isinstance(value, (int,float)) and value > 10:
self.__bat_capacity = value
else:
print('Not correct value')
self.__bat_capacity = 10
def __str__(self):
return Car.__str__(self) + ' with battery ' + str(self.__bat_capacity)
el_car = ElectricCar('tesla', 'model 3', 2020, 4)
print(el_car)
Вывод первого кода:
This car is Tesla Model 3 from 2020 with battery 4
Код 2, который работает:
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
def __str__(self):
return f'This car is {self.make.title()} {self.model.title()} from {self.year}'
class ElectricCar(Car):
def __init__(self, make, model, year, battery_capacity):
super().__init__(make, model, year)
self.bat_capacity = battery_capacity # убрал __
@property
def bat_capacity(self):
return self.__bat_capacity
@bat_capacity.setter
def bat_capacity(self, value):
if isinstance(value, (int,float)) and value > 10:
self.__bat_capacity = value
else:
print('Not correct value')
self.__bat_capacity = 10
def __str__(self):
return Car.__str__(self) + ' with battery ' + str(self.__bat_capacity)
el_car = ElectricCar('tesla', 'model 3', 2020, 4)
print(el_car)
Вывод второго кода:
Not correct value
This car is Tesla Model 3 from 2020 with battery 10
Возможно, я что-то пропустил? Или упускаю? Прошу помочь и направить на путь истинный.
Заранее спасибо