Qual é o propósito de subclassificar o “objeto” da classe em Python?
-
24-09-2019 - |
Pergunta
Todos os python embutidos são subclasses de object
E eu me deparei com muitas classes definidas pelo usuário que também são. Por quê? Qual é o objetivo da classe object
? É apenas uma aula vazia, certo?
Solução
Em suma, define pôneis mágicos livres.
Em Long, o Python 2.2 e anteriormente usou "aulas de estilo antigo". Eles eram uma implementação específica de classes e tinham algumas limitações (por exemplo, você não podia subclassem tipos de construção). A correção para isso era criar um novo estilo de classe. Mas, fazer isso envolveria algumas mudanças incompatíveis com versões anteriores. Então, para garantir que o código que seja escrito para aulas de estilo antigo ainda funcione, o object
A classe foi criada para atuar como uma superclasse para todas as aulas de novo estilo. Então, em Python 2.x, class Foo: pass
criará uma aula de estilo antigo e class Foo(object): pass
criará uma nova classe de estilo.
Em mais tempo, veja Guido's Tipos e classes unificadoras no Python 2.2.
E, em geral, é uma boa ideia entrar no hábito de fazer de todas as suas aulas novas no estilo, porque algumas coisas (o @property
Decorador é aquele que vem à mente) não funcionará com aulas de estilo antigo.
Outras dicas
Resposta curta: Subclassificação object
efetivamente faz disso um novo estilo Classe (observe que isso é desnecessário, pois é automático no Python 3.x)
Para a diferença entre new style
Aulas e old style
Aulas: Veja Esta questão de Stackoverflow. Para a história completa: veja Este bom artigo sobre tipos e objetos python.
Tem a ver com o "novo estilo" das aulas. Você pode ler mais sobre isso aqui: http://docs.python.org/tutorial/classes.html#multiple-nheritance E também aqui: http://docs.python.org/reference/datamodel.html#new-tyle-and-classic-cllasses
O uso de novas classes de estilo permitirá que você use "Recursos versáteis mais recentes do Python, como __slots__, descritores, propriedades e __getAttribute __ ()".
Certo, mas marca a classe como um novo estilo classe. Classes recém -desenvolvidas devem usar o object
base porque custa pouco e à prova de futuro seu código.
A versão curta é que as classes clássicas, que não precisavam de uma superclasse, tinham limitações que não podiam ser contadas sem quebrar muito código antigo. Então eles criaram o conceito de novas classes de estilo que subclassem de object
, e agora você pode fazer coisas legais como definir propriedades e subclasse dict
não é mais um exercício de dor e insetos estranhos.
Os detalhes estão na Seção 3.3 dos documentos Python: Aulas de estilo novo e clássico.
O Python 2.2 introduziu "Novas Classes de Estilo" que tinham vários recursos adicionais em relação às classes de estilo antigo que não subclassem objeto. O objeto de subclasses foi a maneira escolhida de indicar que sua classe deveria ser uma nova classe de estilo, não um estilo antigo.