📘 Dia 21
August 5, 2026 · View on GitHub

📘 Dia 21
Classes e Objetos
Python é uma linguagem de programação orientada a objetos. Tudo em Python é um objeto, com suas propriedades e métodos. Um número, uma string, uma lista, um dicionário, uma tupla, um set etc. usados em um programa são objetos de uma classe integrada correspondente. Criamos uma classe para criar um objeto. Uma classe é como um construtor de objetos, ou um "modelo" (blueprint) para criar objetos. Instanciamos uma classe para criar um objeto. A classe define os atributos e o comportamento do objeto, enquanto o objeto, por sua vez, representa a classe.
Já estamos trabalhando com classes e objetos desde o inÃcio deste desafio, sem saber. Todo elemento em um programa Python é um objeto de uma classe. Vamos verificar se tudo em python é uma classe:
asabeneh@Asabeneh:~$ python
Python 3.9.6 (default, Jun 28 2021, 15:26:21)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> num = 10
>>> type(num)
<class 'int'>
>>> string = 'string'
>>> type(string)
<class 'str'>
>>> boolean = True
>>> type(boolean)
<class 'bool'>
>>> lst = []
>>> type(lst)
<class 'list'>
>>> tpl = ()
>>> type(tpl)
<class 'tuple'>
>>> set1 = set()
>>> type(set1)
<class 'set'>
>>> dct = {}
>>> type(dct)
<class 'dict'>
Criando uma Classe
Para criar uma classe precisamos da palavra-chave class seguida do nome e dois pontos. O nome da classe deve estar em CamelCase.
# sintaxe
class ClassName:
código vai aqui
Exemplo:
class Person:
pass
print(Person)
<__main__.Person object at 0x10804e510>
Criando um Objeto
Podemos criar um objeto chamando a classe.
p = Person()
print(p)
Construtor da Classe
Nos exemplos acima, criamos um objeto a partir da classe Person. No entanto, uma classe sem construtor não é muito útil em aplicações reais. Vamos usar uma função construtora para tornar nossa classe mais útil. Assim como a função construtora em Java ou JavaScript, Python também possui uma função construtora integrada init(). A função construtora init tem o parâmetro self, que é uma referência à instância atual da classe Exemplos:
class Person:
def __init__ (self, name):
# self permite associar um parâmetro à classe
self.name =name
p = Person('Asabeneh')
print(p.name)
print(p)
# saÃda
Asabeneh
<__main__.Person object at 0x2abf46907e80>
Vamos adicionar mais parâmetros à função construtora.
class Person:
def __init__(self, firstname, lastname, age, country, city):
self.firstname = firstname
self.lastname = lastname
self.age = age
self.country = country
self.city = city
p = Person('Asabeneh', 'Yetayeh', 250, 'Finland', 'Helsinki')
print(p.firstname)
print(p.lastname)
print(p.age)
print(p.country)
print(p.city)
# saÃda
Asabeneh
Yetayeh
250
Finland
Helsinki
Métodos do Objeto
Objetos podem ter métodos. Os métodos são funções que pertencem ao objeto.
Exemplo:
class Person:
def __init__(self, firstname, lastname, age, country, city):
self.firstname = firstname
self.lastname = lastname
self.age = age
self.country = country
self.city = city
def person_info(self):
return f'{self.firstname} {self.lastname} is {self.age} years old. He lives in {self.city}, {self.country}'
p = Person('Asabeneh', 'Yetayeh', 250, 'Finland', 'Helsinki')
print(p.person_info())
# saÃda
Asabeneh Yetayeh is 250 years old. He lives in Helsinki, Finland
Métodos Padrão do Objeto
Às vezes, você pode querer ter valores padrão para os métodos do seu objeto. Se dermos valores padrão para os parâmetros no construtor, podemos evitar erros ao chamar ou instanciar nossa classe sem parâmetros. Vamos ver como fica:
Exemplo:
class Person:
def __init__(self, firstname='Asabeneh', lastname='Yetayeh', age=250, country='Finland', city='Helsinki'):
self.firstname = firstname
self.lastname = lastname
self.age = age
self.country = country
self.city = city
def person_info(self):
return f'{self.firstname} {self.lastname} is {self.age} years old. He lives in {self.city}, {self.country}.'
p1 = Person()
print(p1.person_info())
p2 = Person('John', 'Doe', 30, 'Nomanland', 'Noman city')
print(p2.person_info())
# saÃda
Asabeneh Yetayeh is 250 years old. He lives in Helsinki, Finland.
John Doe is 30 years old. He lives in Noman city, Nomanland.
Método para Modificar os Valores Padrão da Classe
No exemplo abaixo, a classe person, todos os parâmetros do construtor têm valores padrão. Além disso, temos o parâmetro skills, que podemos acessar usando um método. Vamos criar o método add_skill para adicionar habilidades à lista de habilidades.
class Person:
def __init__(self, firstname='Asabeneh', lastname='Yetayeh', age=250, country='Finland', city='Helsinki'):
self.firstname = firstname
self.lastname = lastname
self.age = age
self.country = country
self.city = city
self.skills = []
def person_info(self):
return f'{self.firstname} {self.lastname} is {self.age} years old. He lives in {self.city}, {self.country}.'
def add_skill(self, skill):
self.skills.append(skill)
p1 = Person()
print(p1.person_info())
p1.add_skill('HTML')
p1.add_skill('CSS')
p1.add_skill('JavaScript')
p2 = Person('John', 'Doe', 30, 'Nomanland', 'Noman city')
print(p2.person_info())
print(p1.skills)
print(p2.skills)
# saÃda
Asabeneh Yetayeh is 250 years old. He lives in Helsinki, Finland.
John Doe is 30 years old. He lives in Noman city, Nomanland.
['HTML', 'CSS', 'JavaScript']
[]
Herança
Usando herança podemos reaproveitar o código da classe pai. A herança nos permite definir uma classe que herda todos os métodos e propriedades da classe pai. A classe pai ou super ou base é a classe que fornece todos os métodos e propriedades. A classe filha é a classe que herda de outra classe, a classe pai. Vamos criar uma classe student herdando da classe person.
class Student(Person):
pass
s1 = Student('Eyob', 'Yetayeh', 30, 'Finland', 'Helsinki')
s2 = Student('Lidiya', 'Teklemariam', 28, 'Finland', 'Espoo')
print(s1.person_info())
s1.add_skill('JavaScript')
s1.add_skill('React')
s1.add_skill('Python')
print(s1.skills)
print(s2.person_info())
s2.add_skill('Organizing')
s2.add_skill('Marketing')
s2.add_skill('Digital Marketing')
print(s2.skills)
saÃda
Eyob Yetayeh is 30 years old. He lives in Helsinki, Finland.
['JavaScript', 'React', 'Python']
Lidiya Teklemariam is 28 years old. He lives in Espoo, Finland.
['Organizing', 'Marketing', 'Digital Marketing']
Não chamamos o construtor init() na classe filha. Se não o chamamos, ainda podemos acessar todas as propriedades da classe pai. Mas se chamarmos o construtor, podemos acessar as propriedades do pai chamando super.
Podemos adicionar um novo método à classe filha ou podemos sobrescrever os métodos da classe pai criando um método com o mesmo nome na classe filha. Quando adicionamos a função init(), a classe filha não vai mais herdar a função init() do pai.
Sobrescrevendo o Método do Pai
class Student(Person):
def __init__ (self, firstname='Asabeneh', lastname='Yetayeh',age=250, country='Finland', city='Helsinki', gender='male'):
self.gender = gender
super().__init__(firstname, lastname,age, country, city)
def person_info(self):
gender = 'He' if self.gender =='male' else 'She'
return f'{self.firstname} {self.lastname} is {self.age} years old. {gender} lives in {self.city}, {self.country}.'
s1 = Student('Eyob', 'Yetayeh', 30, 'Finland', 'Helsinki','male')
s2 = Student('Lidiya', 'Teklemariam', 28, 'Finland', 'Espoo', 'female')
print(s1.person_info())
s1.add_skill('JavaScript')
s1.add_skill('React')
s1.add_skill('Python')
print(s1.skills)
print(s2.person_info())
s2.add_skill('Organizing')
s2.add_skill('Marketing')
s2.add_skill('Digital Marketing')
print(s2.skills)
Eyob Yetayeh is 30 years old. He lives in Helsinki, Finland.
['JavaScript', 'React', 'Python']
Lidiya Teklemariam is 28 years old. She lives in Espoo, Finland.
['Organizing', 'Marketing', 'Digital Marketing']
Podemos usar a função integrada super() ou o nome da classe pai Person para herdar automaticamente os métodos e propriedades da sua classe pai. No exemplo acima, sobrescrevemos o método do pai. O método da classe filha tem uma caracterÃstica diferente: ele consegue identificar se o gênero é masculino ou feminino e atribuir o pronome apropriado (He/She).
🌕 Agora você está totalmente carregado com o superpoder da programação. Agora faça alguns exercÃcios para o cérebro e os músculos.
💻 ExercÃcios: Dia 21
ExercÃcios: NÃvel 1
- Python tem o módulo chamado statistics e podemos usar esse módulo para fazer todos os cálculos estatÃsticos. No entanto, para aprender a criar e reutilizar funções, vamos tentar desenvolver um programa que calcule as medidas de tendência central de uma amostra (média, mediana, moda) e as medidas de variabilidade (amplitude, variância, desvio padrão). Além dessas medidas, encontre o mÃnimo, o máximo, a contagem, o percentil e a distribuição de frequência da amostra. Você pode criar uma classe chamada Statistics e criar todas as funções que fazem os cálculos estatÃsticos como métodos da classe Statistics. Verifique a saÃda abaixo.
ages = [31, 26, 34, 37, 27, 26, 32, 32, 26, 27, 27, 24, 32, 33, 27, 25, 26, 38, 37, 31, 34, 24, 33, 29, 26]
print('Count:', data.count()) # 25
print('Sum: ', data.sum()) # 744
print('Min: ', data.min()) # 24
print('Max: ', data.max()) # 38
print('Range: ', data.range()) # 14
print('Mean: ', data.mean()) # 30
print('Median: ', data.median()) # 29
print('Mode: ', data.mode()) # {'mode': 26, 'count': 5}
print('Standard Deviation: ', data.std()) # 4.2
print('Variance: ', data.var()) # 17.5
print('Frequency Distribution: ', data.freq_dist()) # [(20.0, 26), (16.0, 27), (12.0, 32), (8.0, 37), (8.0, 34), (8.0, 33), (8.0, 31), (8.0, 24), (4.0, 38), (4.0, 29), (4.0, 25)]
# sua saÃda deve ser parecida com esta
print(data.describe())
Count: 25
Sum: 744
Min: 24
Max: 38
Range: 14
Mean: 30
Median: 29
Mode: (26, 5)
Variance: 17.5
Standard Deviation: 4.2
Frequency Distribution: [(20.0, 26), (16.0, 27), (12.0, 32), (8.0, 37), (8.0, 34), (8.0, 33), (8.0, 31), (8.0, 24), (4.0, 38), (4.0, 29), (4.0, 25)]
ExercÃcios: NÃvel 2
- Crie uma classe chamada PersonAccount. Ela possui as propriedades firstname, lastname, incomes, expenses e os métodos total_income, total_expense, account_info, add_income, add_expense e account_balance. Incomes é um conjunto de receitas e suas descrições. O mesmo vale para expenses.
🎉 PARABÉNS ! 🎉