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

Artigo relacionado - Python Class

  • Python Importar classe de outro arquivo