Alterando o atributo do objeto de forma direta.
# Objeto que guarda os dados da temperatura de um ambiente
class Celsius:
def __init__(self, temperatura):
if temperatura < -273.15:
print("Temperatura abaixo de -273.15 não é possível.")
else:
self.temperatura = temperatura
# Método que converte graus celsius para fahrenheit
def para_fahrenheit(self):
return (self.temperatura * 1.8) + 32
# Criando um novo objeto...
casa = Celsius(25)
# Retornando a temperatura unsando o Getter
print(casa.temperatura)
# Usando o método para_fahreheit
print(casa.para_fahrenheit())
# Testando a condição do Setter
casa.temperatura = -300
# Usando o método para_fahreheit
print(casa.para_fahrenheit())
Nesse script acima, perceba que ao criar o objeto conseguimos definir alguns atributos e até mesmo definir uma condição para esse atributo. Porém, essa condição só se aplica ao inicializar o objeto. Um vez inicializado, os atributos podem ser mudados diretamente pelo usuário, sem restrições. Os motivos desse forma de script de orientação a objeto não ser muito utilizada são claras devido à falta de controle sobre os atributos e pouca praticidade ao necessitar fazer alterações no código.
Utlizando os métodos Getters e Setters.
# Objeto que guarda os dados da temperatura de um ambiente
class Celsius:
def __init__(self, temperatura):
self.set_temperatura(temperatura)
# Método que converte graus celsius para fahrenheit
def para_fahrenheit(self):
return (self.__temperatura * 1.8) + 32
# Método Getter
def get_temperatura(self):
return self.__temperatura
# Método Setter
def set_temperatura(self, valor):
if valor < -273.15:
print("Temperatura abaixo de -273.15 não é possível.")
else:
self.__temperatura = valor
# Criando um novo objeto...
casa = Celsius(25)
# Retornando a temperatura unsando o Getter
print(casa.get_temperatura())
# Usando o método para_fahreheit
print(casa.para_fahrenheit())
# Testando a condição do Setter
casa.set_temperatura(-300)
# Usando o método para_fahreheit
print(casa.para_fahrenheit())
Através dessa forma, nós podemos tornar os atributos privados e utilizar os métodos Getter e Setter para fazer as operações que desejamos. Através do Setter podemos, até mesmo estabelecer uma condição para a alteração de um atributo. A utilização dos Getters e Setters é o padrão na orientação de objetos presentes em linguagens como o Java e, apesar de funcionar também no Python, temos uma maneira especial de atingirmos o mesmo resultado no Python ...