Obs.: tive de refazer a pergunta pois foi respondida anteriormente com recurso de IA. Como a resposta estava errada e sei que tópicos que já possuem respostas não são mais visualizados, estou postando mais uma vez.
Escrevi o seguinte código para limitar os tipos de moto que poderiam ser inseridos a 2:
from ex.vehicle.modules.vehicle import Vehicle
class Bike(Vehicle):
def __init__(self, model, brand, bike_type):
super().__init__(model, brand)
self._bike_type = bike_type
def __str__(self):
return (
f"{super().__str__()}" \
f"Bike type: {self.bike_type}\n"
)
@property
def bike_type(self):
return self._bike_type
@bike_type.setter
def bike_type(self, type):
if type.lower() == "sporty" or type.lower() == "casual":
self._bike_type = type
else:
print("The type of bike can be just 'casual' or 'sporty'.")
.
Problema: por alguma motivo, quando eu crio uma instância da classe, tal como:
bike = Bike(
model="Hornet 2000",
brand="Honda",
bike_type="anything",
)
O parâmetro "bike_type" é aceito (mesmo que não seja permitido pelo meu setter). Aparentemente, isso ocorre pois quando estamos criando um objeto, o mesmo atribui os valores diretamente aos atributos sem antes passar pelo setter.
.