Uma classe abstrata é uma classe, mas não uma classe da qual você pode criar objetos diretamente. Sua finalidade é definir como outras classes devem se parecer, ou seja, quais métodos e propriedades elas devem ter.
Os métodos e propriedades definidos (mas não implementados) em uma classe abstrata são chamados de métodos abstratos e propriedades abstratas . Todos os métodos e propriedades abstratos precisam ser implementados em uma classe filha para poder criar objetos a partir dela.
Podemos criar uma classe abstrata herdando da ABCclasse que faz parte do abcmódulo .
from abc import (
ABC,
abstractmethod,
)
class BasicPokemon(ABC):
def __init__(self, name):
self.name = name
self._level = 1
@abstractmethod
def main_attack(self):
...
O que acontece se você tentar criar um objeto BasicPokemondiretamente? TypeError!
Agora, você notará que BasicPokemono __init__método de espera um nameargumento , portanto, o código acima não terá funcionado de qualquer maneira. A coisa a notar aqui é que ele nem vai para o __init__método para verificar isso. O fato de ter um método abstrato que não foi implementado tem precedência e falha por causa disso!
É assim que se usaria a BasicPokemonclasse.
from collections import namedtuple
Attack = namedtuple('Attack', ('name', 'damage'))
class Pikachu(BasicPokemon):
def main_attack(self):
return Attack('Thunder Shock', 5)
class Charmander(BasicPokemon):
def main_attack(self):
return Attack('Flame Thrower', 5)
Observe que você também pode criar propriedades abstratas usando o mesmo abstractmethoddecorador.
from abc import (
ABC,
abstractmethod,
)
class BasicPokemon(ABC):
def __init__(self, name):
self.name = name
@property
@abstractmethod
def level(self):
...
@abstractmethod
def main_attack(self):
...
class Pikachu(BasicPokemon):
@property
def level(self):
return 1
def main_attack(self):
return Attack('Thunder Shock', 5)
Alguns de vocês podem estar se perguntando por que não poderíamos simplesmente usar uma classe normal (ou seja, não herdar de ABC) e gerar um NotImplementerErrorpara métodos que não foram implementados, como no exemplo abaixo.
class NotAbstractBasicPokemon:
def __init__(self, name):
self.name = name
self._level = 1
def main_attack(self):
raise NotImplementedError()
Por outro lado, tentar criar um objeto de BasicPokemonresulta em um erro imediatamente, como vimos anteriormente.
No exemplo que estamos usando neste post, BasicPokemono propósito de 's era ser usado como um modelo para criar outras classes para tipos específicos de Pokémon. Existem alguns benefícios óbvios em ter uma classe abstrata da qual todos precisam herdar para criar um novo Pokémon:
Neste post, vimos as classes abstratas do Python e como elas nos dão uma maneira de descrever como esperamos que as subclasses sejam implementadas e avisar os usuários (ou seja, outros programadores ou nossos futuros eus) quando partes críticas não são definidas.
[1]https://docs.python.org/3/library/abc.html
[2]https://realpython.com/python-interface/
Mais do mesmo autor.
Calculando Usando Simulações de Monte-Carlo
Quando você faz uma solicitação para facebook.com, seu computador procura o nome de domínio para traduzir esse nome de domínio em um endereço IP para que seu computador possa fazer essa conexão.
Você deve ter ouvido falar sobre todos os novos plug-ins poderosos do ChatGPT, como navegador, intérprete de código, etc. Mas há um problema, o acesso aos plug-ins é limitado a uma lista de espera e, portanto, muitos não têm acesso a ela.
No atual cenário de negócios em rápida evolução, o conceito de trabalho híbrido e remoto ganhou um impulso sem precedentes. À medida que as empresas continuam a se adaptar às mudanças nas necessidades e expectativas de seus funcionários, especialistas de várias áreas se reuniram para discutir os benefícios, os desafios e o futuro dessa forma transformadora de trabalhar.
No mundo acelerado e competitivo de hoje, a carreira desempenha um papel significativo no crescimento pessoal, na estabilidade financeira e na satisfação geral com a vida. No entanto, muitos indivíduos encontram-se presos em um ciclo implacável de estagnação e insatisfação, definhando gradualmente em suas vidas profissionais.
Qualquer mente racional sabe que os círculos políticos e midiáticos são dominados pela esquerda, até mesmo pela extrema esquerda, um estado de coisas que cria um desequilíbrio no discurso político. No campo da religião, esse desequilíbrio é bem visível: jornais e redes de esquerda não se apressam em defender a fé cristã.