15.12.2022 Views

Python Eficaz

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

def get(self):

return self._value

class Child(ApiClass):

def __init__(self):

super().__init__()

self._value = 'hello' # Conflito!!!

a = Child()

print(a.get(), 'and', a._value, 'should be different')

>>>

hello and hello should be different

O problema é preocupante especialmente em classes que fazem parte de uma

API pública. As subclasses estão fora do seu alcance, portanto não é possível

refatorá-las para resolver o problema. Esse tipo de conflito é possível em

especial naqueles nomes de atributos mais comumente usados (como, por

exemplo, value). Para reduzir esse risco, podemos usar um atributo privativo na

classe-mãe para assegurar que não haja sobreposição de nomes com as classesfilha.

class ApiClass(object):

def __init__(self):

self.__value = 5

def get(self):

return self.__value

class Child(ApiClass):

def __init__(self):

super().__init__()

self._value = 'hello' # OK!

a = Child()

print(a.get(), 'and', a._value, 'are different')

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!