Classe aninhada em Python
As classes contêm diferentes membros de dados e funções e nos permitem criar objetos para acessar esses membros.
Python, como uma linguagem de programação orientada a objetos, tem muitos desses objetos de diferentes classes. Em Python, temos um construtor importante chamado __init__
, que é chamado toda vez que uma instância da classe é criada, e também temos a palavra-chave self
para se referir à instância atual da classe.
Uma classe aninhada (também chamada de classe interna) é definida em outra classe. É muito comumente usado em todas as linguagens de programação orientadas a objetos e pode ter muitos benefícios. Não melhora o tempo de execução, mas pode ajudar na legibilidade e manutenção do programa, agrupando classes relacionadas e também ocultar a classe aninhada do mundo externo.
O código a seguir mostra uma estrutura muito simples de uma classe aninhada:
class Dept:
def __init__(self, dname):
self.dname = dname
class Prof:
def __init__(self, pname):
self.pname = pname
math = Dept("Mathematics")
mathprof = Dept.Prof("Mark")
print(math.dname)
print(mathprof.pname)
Resultado:
Mathematics
Mark
Observe que não podemos acessar a classe interna diretamente. Criamos seu objeto usando o formato outer.inner
.
Podemos acessar a classe aninhada na classe externa, mas não o contrário. Para acessar a classe aninhada na classe externa, podemos usar o formato outer.inner
ou a palavra-chave self
.
No código abaixo, fazemos algumas alterações nas classes acima e acessamos uma função da classe aninhada usando a classe pai:
class Dept:
def __init__(self, dname):
self.dname = dname
self.inner = self.Prof()
def outer_disp(self):
self.inner.inner_disp(self.dname)
class Prof:
def inner_disp(self, details):
print(details, "From Inner Class")
math = Dept("Mathematics")
math.outer_disp()
Resultado:
Mathematics From Inner Class
Também podemos ter várias classes aninhadas em Python. Essas situações são chamadas de várias classes aninhadas com uma ou mais classes internas.
Também pode haver alguns casos em que temos uma classe aninhada dentro de uma classe aninhada, e isso é chamado de classe aninhada de vários níveis.
O código a seguir mostra um exemplo muito simples de uma classe aninhada de vários níveis.
class Dept:
def __init__(self, dname):
self.dname = dname
class Prof:
def __init__(self, pname):
self.pname = pname
class Country:
def __init__(self, cname):
self.cname = cname
math = Dept("Mathematics")
mathprof = Dept.Prof("Mark")
country = Dept.Prof.Country("UK")
print(math.dname, mathprof.pname, country.cname)
Resultado:
Mathematics Mark UK
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn