15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

declarados dentro do bloco class que os contém.

class MyOtherObject(object):

def __init__(self):

self.__private_field = 71

@classmethod

def get_private_field_of_instance(cls, instance):

return instance.__private_field

bar = MyOtherObject()

assert MyOtherObject.get_private_field_of_instance(bar) == 71

Como era de se esperar, uma subclasse não consegue acessar os campos

privativos de sua classe-mãe.

class MyParentObject(object):

def __init__(self):

self.__private_field = 71

class MyChildObject(MyParentObject):

def get_private_field(self):

return self.__private_field

baz = MyChildObject()

baz.get_private_field()

>>>

AttributeError: 'MyChildObject' object has no attribute

➥'_MyChildObject__private_field'

O comportamento do atributo privativo foi implementado com uma simples

transformação do nome do atributo. Quando o compilador do Python vê um

acesso a um atributo privativo em métodos como

MyChildObject.get_private_field, traduz __private_field para acessar

_MyChildObject__private_field em seu lugar. Neste exemplo, __private_field

foi definido apenas em MyParentObject.__init__, portanto o nome real do

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!