Classes e objetos Python - Programação orientada a objetos



Este blog em 'Python Class' lida com os fundamentos de classe, atributo e vários conceitos OOPS, como herança, polimorfismo e encapsulamento.

Depois que Stack Overflow previu que até 2019, Python superará outras linguagens em termos de desenvolvedores ativos, a demanda por só está crescendo.Python segue o paradigma de programação orientada a objetos. Ele lida com a declaração de classes Python, criando objetos a partir delas e interagindo com os usuários. Em uma linguagem orientada a objetos, o programa é dividido em objetos independentes ou você pode dizer em vários miniprogramas. Cada objeto representa uma parte diferente do aplicativo que pode se comunicar entre si.
Neste blog da classe Python, você entenderá cada aspecto das classes e objetos na seguinte sequência:

Vamos começar.:-)





O que é uma classe Python?

Uma classe em python é o projeto a partir do qual objetos específicos são criados. Ele permite que você estruture seu software de uma maneira particular. Aí vem uma pergunta como? As classes nos permitem agrupar logicamente nossos dados e funcionar de uma forma que seja fácil de reutilizar e uma forma de construir, se necessário. Considere a imagem abaixo.

ClassesAndObjects - classe Python - EdurekaNa primeira imagem (A), representa a planta de uma casa que pode ser considerada como Classe . Com a mesma planta, podemos criar várias casas e estas podem ser consideradas como Objetos . Usando uma classe, você pode adicionar consistência aos seus programas para que possam ser usados ​​de maneiras mais limpas e eficientes. Os atributos são membros de dados (variáveis ​​de classe e variáveis ​​de instância) e métodos que são acessados ​​via notação de ponto.



  • Variável de classe é uma variável que é compartilhada por todos os diferentes objetos / instâncias de uma classe.
  • Variáveis ​​de instância são variáveis ​​exclusivas de cada instância. É definido dentro de um método e pertence apenas à instância atual de uma classe.
  • Métodos também são chamados de funções que são definidas em uma classe e descrevem o comportamento de um objeto.

Agora, vamos seguir em frente e ver como funciona no PyCharm. Para começar, primeiro dê uma olhada na sintaxe de uma classe Python.

Sintaxe :

class Class_name: instrução-1. . declaração-N

Aqui o ' classe' instrução cria uma nova definição de classe. O nome da classe segue imediatamente a palavra-chave “ classe' em python, que é seguido por dois pontos. Para criar uma classe em python, considere o exemplo abaixo:



classe funcionário: passar # sem atributos e métodos emp_1 = funcionário () emp_2 = funcionário () # variável de instância pode ser criada manualmente emp_1.first = 'aayushi' emp_1.last = 'Johari' emp_1.email='aayushi@edureka.co 'emp_1.pay = 10000 emp_2.first =' test 'emp_2.last =' abc 'emp_2.email='test@company.com' emp_2.pay = 10000 imprimir (emp_1.email) imprimir (emp_2.email)

Resultado -

aayushi@edureka.co test@company.com

Agora, e se não quisermos definir manualmente essas variáveis. Você verá muito código e também está sujeito a erros. Então, para torná-lo automático, podemos usar o método “init”. Para isso, vamos entender o que exatamente são métodos e atributos em uma classe Python.

Métodos e atributos em uma classe Python

Agora, a criação de uma classe está incompleta sem alguma funcionalidade. Portanto, as funcionalidades podem ser definidas definindo vários atributos que atuam como um contêiner para dados e funções relacionadas a esses atributos. Funções em python também são chamadas de Métodos . Falando sobre o iniciar método , é uma função especial que é chamada sempre que um novo objeto dessa classe é instanciado. Você pode pensar nisso como o método de inicialização ou pode considerar isso como construtores, se você estiver vindo de qualquer outro plano de fundo de programação orientada a objetos, como C ++, Java etc. Agora, quando definimos um método dentro de uma classe, eles recebem instância automaticamente. Vamos prosseguir com a classe python e aceitar o nome, o sobrenome e o salário usando este método.

funcionário da classe: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' emp_1 = funcionário ('aayushi', 'johari', 350000) emp_2 = funcionário ('teste', 'teste', 100000) imprimir (emp_1.email) imprimir (emp_2.email)

Agora, em nosso método “init”, definimos essas variáveis ​​de instância (self, first, last, sal). Self é a instância, o que significa que sempre que escrevemos self.fname = first, é o mesmo que emp_1.first = ’aayushi’. Em seguida, criamos instâncias de classe de funcionário onde podemos passar os valores especificados no método init. Este método usa as instâncias como argumentos. Em vez de fazer manualmente, será feito automaticamente agora.

como sair em java

Em seguida, queremos a capacidade de realizar algum tipo de ação. Para isso, vamos adicionar um método para esta classe. Suponha que eu queira que a funcionalidade exiba o nome completo do funcionário. Então, vamos implementar isso de forma prática.

funcionário da classe: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' def fullname (self): return '{} {}'. format (self.fname, self.lname) emp_1 = funcionário ('aayushi', 'johari', 350000) emp_2 = funcionário ('teste', 'teste', 100000) print (emp_1.email) print (emp_2.email) print (emp_1.fullname ()) print (emp_2.fullname ())

Resultado-

aayushi.johari@company.com test.test@company.com aayushijohari testtest

Como você pode ver acima, criei um método chamado “nome completo” dentro de uma classe. Portanto, cada método dentro de uma classe Python leva automaticamente a instância como o primeiro argumento. Agora, dentro desse método, escrevi a lógica para imprimir o nome completo e retornar isso em vez de emp_1 nome e sobrenome. Em seguida, usei 'self' para que funcione com todas as instâncias. Portanto, para imprimir isso sempre, usamos um método .

Avançando com as classes Python, existem variáveis ​​que são compartilhadas entre todas as instâncias de uma classe. Estes são chamados de variáveis ​​de classe . Variáveis ​​de instância podem ser únicas para cada instância, como nomes, e-mail, sal, etc. Complicado? Vamos entender isso com um exemplo. Consulte o código abaixo para saber o aumento anual do salário.

funcionário da classe: perc_raise = 1.05 def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' def fullname (self): return '{} {}'. format (self.fname, self.lname) def apply_raise (self): self.sal = int (self.sal * 1.05 ) emp_1 = funcionário ('aayushi', 'johari', 350000) emp_2 = funcionário ('teste', 'teste', 100000) imprimir (emp_1.sal) emp_1.apply_raise () imprimir (emp_1.sal)

Resultado-

350000 367500

Como você pode ver acima, imprimi primeiro o salário e depois apliquei o aumento de 1,5%. Para acessar essas variáveis ​​de classe, precisamos acessá-las por meio da classe ou de uma instância da classe. Agora, vamos entender os vários atributos em uma classe Python.

Atributos em uma classe Python

Atributos em Python definem uma propriedade de um objeto, elemento ou arquivo. Existem dois tipos de atributos:

  • Atributos de classe integrados: Existem vários atributos integrados presentes nas classes Python. Por exemplo _dict_, _doc_, _name _, etc. Deixe-me pegar o mesmo exemplo em que desejo visualizar todos os pares de valores-chave de employee1. Para isso, você pode simplesmente escrever a instrução abaixo, que contém o namespace da classe:

    imprimir (emp_1 .__ dict__)

    Depois de executá-lo, você receberá uma saída como: {‘fname’: ‘aayushi’, ‘lname’: ‘johari’, ‘sal’: 350000, ’email’: ‘aayushi.johari@company.com’}

  • Atributos definidos pelos usuários : Os atributos são criados dentro da definição da classe. Podemos criar dinamicamente novos atributos para instâncias existentes de uma classe. Os atributos também podem ser vinculados aos nomes das classes.

Em seguida, temos público, protegido e privado atributos. Vamos entendê-los em detalhes:

encontre o maior número em java
Nomeação Tipo Significado
NomePúblicoEsses atributos podem ser usados ​​livremente dentro ou fora de uma definição de classe
_nomeProtegidoAtributos protegidos não devem ser usados ​​fora da definição de classe, a menos que dentro de uma definição de subclasse
__nomePrivadoEsse tipo de atributo é inacessível e invisível. Não é possível ler nem escrever esses atributos, exceto dentro da própria definição de classe


A seguir, vamos entender o componente mais importante em uma classe Python, ou seja, Objetos.

O que são objetos em uma classe Python?

Como discutimos acima, um objeto pode ser usado para acessar diferentes atributos. É usado para criar uma instância da classe. Uma instância é um objeto de uma classe criada em tempo de execução.

TPara dar uma visão geral rápida, um objeto é basicamente tudo o que você vê ao redor. Por exemplo: Um cachorro é um objeto da classe animal, eu sou um objeto da classe humana. Da mesma forma, pode haver objetos diferentes para a mesma classe de telefone.Isso é bastante semelhante a uma chamada de função que já discutimos. Vamos entender isso com um exemplo:

class MyClass: def func (self): print ('Hello') # cria uma nova MyClass ob = MyClass () ob.func ()

Prosseguindo com a classe python, vamos entender os vários conceitos de OOPs.

Conceitos OOPs

OOPs refere-se à Programação Orientada a Objetos em Python. Bem, Python não é totalmente orientado a objetos, pois contém algumas funções procedurais. Agora, você deve estar se perguntando qual é a diferença entre uma programação procedural e orientada a objetos. Para esclarecer suas dúvidas, em uma programação procedural, todo o código é escrito em um longo procedimento, embora possa conter funções e sub-rotinas. Não é gerenciável, pois os dados e a lógica se misturam. Mas quando falamos sobre programação orientada a objetos, o programa é dividido em objetos autocontidos ou vários miniprogramas. Cada objeto representa uma parte diferente do aplicativo, que possui seus próprios dados e lógica para se comunicarem entre si. Por exemplo, um site possui diferentes objetos, como imagens, vídeos etc.
A programação orientada a objetos inclui o conceito de classe Python, objeto, herança, polimorfismo, abstração, etc. Vamos entender esses tópicos em detalhes.

Classe Python: herança

A herança nos permite herdar atributos e métodos da classe base / pai. Isso é útil porque podemos criar subclasses e obter todas as funcionalidades de nossa classe pai. Então, podemos substituir e adicionar novas funcionalidades sem afetar a classe pai. Vamos entender o conceito de classe pai e classe filha com um exemplo.

Como podemos ver na imagem, uma criança herda as propriedades do pai. Da mesma forma, em python, existem duas classes:

1. Classe parental (classe Super ou Base)

2. Classe filha (subclasse ou classe derivada)

Uma classe que herda as propriedades é conhecida como Criança Classe, enquanto uma classe cujas propriedades são herdadas é conhecida como Pai classe.

Herança se refere à capacidade de criar Subclasses que contêm especializações de seus pais. É ainda dividido em quatro tipos, nomeadamente heranças simples, de vários níveis, hierárquicas e múltiplas. Consulte a imagem abaixo para um melhor entendimento.

Vamos prosseguir com a classe python e entender como a herança é útil.

Digamos, eu quero criar classes para os tipos de funcionários. Vou criar ‘desenvolvedores’ e ‘gerentes’ como subclasses, uma vez que tanto os desenvolvedores quanto os gerentes terão um nome, e-mail e salário e todas essas funcionalidades estarão presentes na classe de funcionários. Portanto, em vez de copiar o código para as subclasses, podemos simplesmente reutilizar o código herdando do funcionário.

funcionário da classe: num_employee = 0 raise_amount = 1,04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' employee.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) class developer (employee): pass emp_1 = developer ('aayushi', 'johari', 1000000) print (emp_1.email)
 Resultado - aayushi.johari@company.com

Como você pode ver na saída acima, todos os detalhes da classe de funcionário estão disponíveis na classe de desenvolvedor.Agora, e se eu quiser alterar o raise_amount de um desenvolvedor para 10%? vamos ver como isso pode ser feito na prática.

funcionário da classe: num_employee = 0 raise_amount = 1,04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' employee.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) class developer (employee): raise_amount = 1,10 emp_1 = developer ('aayushi', 'johari', 1000000) print (emp_1.raise_amount)
 Resultado - 1,1

Como vocês podem ver, ele atualizou o percentual de aumento do salário de 4% para 10%.Agora, se eu quiser adicionar mais um atributo, digamos uma linguagem de programação em nosso método init, mas não existe em nossa classe pai. Há alguma solução para isso? Sim! podemos copiar toda a lógica do funcionário e fazer isso, mas isso aumentará novamente o tamanho do código. Então, para evitar isso, vamos considerar o código abaixo:

funcionário da classe: num_employee = 0 raise_amount = 1,04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' employee.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * aumento_quantidade) desenvolvedor de classe (funcionário): aumento_quantidade = 1,10 def __init __ (self, first, last, sal, prog_lang): super () .__ init __ (first, last, sal) self.prog_lang = prog_lang emp_1 = desenvolvedor ( 'aayushi', 'johari', 1000000, 'python') imprimir (emp_1.prog_lang)

Portanto, com apenas um pouco de código, fiz alterações. Usei super .__ init __ (primeiro, último, pagamento) que herda as propriedades da classe base.Para concluir, a herança é usada para reutilizar o código e reduzir a complexidade de um programa.

Classe Python: polimorfismo

Polimorfismo em Ciência da Computação é a capacidade de apresentar a mesma interface para diferentes formas subjacentes. Em termos práticos, polimorfismo significa que se a classe B herda da classe A, ela não precisa herdar tudo sobre a classe A, ela pode fazer algumas das coisas que a classe A faz de forma diferente. É mais comumente usado ao lidar com herança. Python é implicitamente polimórfico, ele tem a capacidade de sobrecarregar os operadores padrão para que eles tenham o comportamento apropriado com base em seu contexto.

Vamos entender com um exemplo:

class Animal: def __init __ (self, name): self.name = name def talk (self): pass class Dog (Animal): def talk (self): print ('Woof') class Cat (Animal): def talk ( self): print ('MEOW!') c = Gato ('gatinho') c.talk () d = Cachorro (Animal) d.talk ()

Resultado -

Miau! Woof

A seguir, vamos passar para outro conceito de programação orientada a objetos, ou seja, Abstração.

Classe Python: abstração

A abstração é usada para simplificar a realidade complexa modelando classes adequadas ao problema. Aqui, temos uma classe abstrata que não pode ser instanciada. Isso significa que você não pode criar objetos ou instâncias para essas classes. Ele só pode ser usado para herdar certas funcionalidades que você chama de classe base. Portanto, você pode herdar funcionalidades, mas, ao mesmo tempo, não pode criar uma instância dessa classe em particular. Vamos entender o conceito de classe abstrata com um exemplo abaixo:

from abc import ABC, abstractmethod class Employee (ABC): @abstractmethod def describe_salary (self, sal): pass class Developer (Employee): def recover_salary (self, sal): finalsalary = sal * 1.10 return finalsalary emp_1 = Desenvolvedor () imprimir (emp_1.calculate_salary (10000))

Resultado-

11000,0

Como você pode ver na saída acima, aumentamos o salário-base para 10%, ou seja, o salário agora é 11.000. Agora, se você realmente continuar e fizer um objeto da classe 'Funcionário', ele irá gerar um erro como o python não não permitem que você crie um objeto de classe abstrata. Mas usando a herança, você pode realmente herdar as propriedades e executar as respectivas tarefas.

Então pessoal, tudo se resumia a classes e objetos Python. Cobrimos todos os fundamentos da classe Python, objetos e vários conceitos orientados a objetos em Python, então você pode começar a praticar agora. Espero que vocês tenham gostado de ler este blog sobre “Aula Python” e tenham clareza sobre cada um dos aspectos que discuti acima. Após a aula de python, estarei criando mais blogs sobre Python para a biblioteca e array de aprendizagem do scikit. Fique ligado!

Tem alguma questão para nós? Mencione isso na seção de comentários deste blog “Classe Python” e entraremos em contato com você o mais breve possível.

o que é hashset em java

Para obter um conhecimento aprofundado do Python, juntamente com seus vários aplicativos, você pode com nosso treinamento online ao vivo com suporte 24 horas nos sete dias da semana e acesso vitalício.