O getter é feito pra você retornar ao usuario da classe um atributo x pro usuario sem afetar a classe ou de uma maneira melhor pro usuario e o setter é feito pra adicionar algo a classe sem causar problemas a classe.
Por exemplo:
from re import findall
class NumberInString():
def __init__(self, string):
self.__string = string
def remove_numbers(self):
self.__string = self.__string.strip(str().join(self.__has_number()))
return self.__string
def __has_number(self):
pattern = '[0-9]'
find_numbers = findall(pattern, self.__string)
return find_numbers
@property
def string(self):
return self.__string
@string.setter
def string(self, string):
self.__string = string
Nessa função simples eu consigo criar a string sem ser um str
, mas se eu coloco no setter um verificador de se é uma string ou não eu consigo validar que sempre vou estar recebendo uma string e o código não vai quebrar:
@string.setter
def string(self, string):
if type(string) != str:
raise ValueError("We just accept strings in this variable.")
else:
self.__string = string
>>>from example import NumberInString as nis
>>>string1 = nis("abcs123")
>>>string1.string = 1
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Users\Luige\PycharmProjects\example\tests.py", line 25, in string
raise ValueError("We just accept strings in this variable.")
ValueError: We just accept strings in this variable.
>>>string1.string = "1"
Mesma coisa no getter, eu posso fazer o getter retornar como algo que é esperado pelo usuario como por exemplo um json ou qualquer outra coisa.
@property
def string(self):
return {"string":self.__string}
>>>from example import NumberInString as nis
>>>string1 = nis("abc1123")
>>>string1.remove_numbers()
'abc'
>>>string1.string
{'string': 'abc'}
Sempre vão existir pessoas que gostam e que não gostam de todas as coisas. Assim como vai ter pessoa falando que em 2021 vale mais a pena fazer um site usando html e css puro ao invés de acelerar o processo usando bibliotecas e outras linguagens. Cabe a você decidir o que vai ser melhor pra você de acordo com seu contexto e analizar o que você quer e o que você precisa. Não siga cegamente a opnião de ninguém, analize, absorva e tire a sua própria. Não existe certo e errado, ta todo mundo fazendo a mesma coisa cada um do seu jeito, melhor e pior é questão de perspectiva e propósito.
De qualquer forma se quiser aprender mais sobre classes e formas pythonicas de fazer as coisas te recomendo esse video (em inglês) que é excelente.