From 05b530c5554d136d00d949a5f3375c952c4f20fa Mon Sep 17 00:00:00 2001 From: Harold Gautschi Date: Wed, 25 Aug 2021 10:20:57 -0400 Subject: [PATCH 1/6] =?UTF-8?q?Inic=C3=ADo=20da=20aula=20de=20oo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/__init__.py | 0 oo/pessoa.py | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 oo/__init__.py create mode 100644 oo/pessoa.py diff --git a/oo/__init__.py b/oo/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/oo/pessoa.py b/oo/pessoa.py new file mode 100644 index 000000000..eb7c0a9c1 --- /dev/null +++ b/oo/pessoa.py @@ -0,0 +1,2 @@ +class Pessoa: + pass From 98518ff532212c3907aed3d777eeb4ca546e4dd6 Mon Sep 17 00:00:00 2001 From: Harold Gautschi Date: Wed, 25 Aug 2021 13:13:51 -0400 Subject: [PATCH 2/6] =?UTF-8?q?Criar=20e=20removido=20atributos=20din?= =?UTF-8?q?=C3=A2mico=20de=20objetos=20do=20tipo=20Pessoa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index eb7c0a9c1..13a8dc1ca 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,2 +1,32 @@ class Pessoa: - pass + def __init__(self, *filhos, nome=None, idade=35): + self.idade = idade + self.nome = nome + self.filhos = list(filhos) + + def comprimentar(self): + return f'Olá {id(self)}' + + +if __name__ == '__main__': + jordan = Pessoa(nome='Jordan', idade=12) + harold = Pessoa(jordan, nome='Harold', idade=50) + print(Pessoa.comprimentar(harold)) + print(id(harold)) + print(harold.comprimentar()) + print(harold.nome) + print((harold.idade)) + for filho in harold.filhos: + print(filho.nome) + # Criar atributos dinãmico + harold.sobrenome = 'Gautschi' + # Apagar um atributo + del jordan.filhos + # Mostrar os atributos de instancia objeto.__dict__ + print(harold.__dict__) + print(jordan.__dict__) + + + + + From 38cd2a34181711fdab2194cfed803b57f9f64c2e Mon Sep 17 00:00:00 2001 From: Harold Gautschi Date: Wed, 25 Aug 2021 13:30:07 -0400 Subject: [PATCH 3/6] atributo de class --- oo/pessoa.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/oo/pessoa.py b/oo/pessoa.py index 13a8dc1ca..b0607d8c3 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,4 +1,9 @@ class Pessoa: + # atributo de class + olhos = 2 + + # atributos de instância + # função dunder init __init__ (para inicialização dos atributo de instância) def __init__(self, *filhos, nome=None, idade=35): self.idade = idade self.nome = nome @@ -25,6 +30,16 @@ def comprimentar(self): # Mostrar os atributos de instancia objeto.__dict__ print(harold.__dict__) print(jordan.__dict__) + # chamar atributo de class + print(Pessoa.olhos) + # modificando o atributo de class, ele passa a ser um atributo do objeto + harold.olhos = 1 + # acesso no atributo de class pelo objeto + print(harold.olhos) + print(jordan.olhos) + print(id(Pessoa.olhos), id(harold.olhos), id(jordan.olhos)) + print(harold.__dict__) + print(jordan.__dict__) From bc2d75aa812ce7838879fcc3c5c66db35355c9dd Mon Sep 17 00:00:00 2001 From: Harold Gautschi Date: Wed, 25 Aug 2021 16:56:03 -0400 Subject: [PATCH 4/6] Enunciado do projeto carro --- oo/carro.py | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++ oo/pessoa.py | 15 +++++++-- 2 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 oo/carro.py diff --git a/oo/carro.py b/oo/carro.py new file mode 100644 index 000000000..ec31ca27d --- /dev/null +++ b/oo/carro.py @@ -0,0 +1,93 @@ +""" +Você deve criar uma classe carro que vai possuir +dois atributos compostos por outras duas classes: +1) Motor +2) Direção + +O Motor terá a responsabilidade de controlar a velocidade. +Ele oferece os seguintes atributos: +1) Atributo de dado velocidade +2) Método acelerar, que deverá incrementar a velocidade de uma unidade +3) Método frear que deverá decrementar a velocidade em duas unidades + +A Direção terá a responsabilidade de controlar a direção. Ela oferece +os seguintes atributos: +1) Valor de direção com valores possíveis: Norte, Sul, Lest, Oeste +2) Método girar_a_direita +3) Método girar_a_esquerda + N +O L + S + + Exemplo: + >>> # Testando o Motor + >>> motor = Motor() + >>> motor.velocidade + 0 + >>> motor.acelerar() + >>> motor.velocidade + 1 + >>> motor.acelerar() + >>> motor.velocidade + 2 + >>> motor.acelerar() + >>> motor.velocidade + 3 + >>> motor.frear() + >>> motor.velocidade + 1 + >>> motor.frear() + >>> motor.velocidade + 0 + >>> # Testando Direcao + >>> direcao = Direcao() + >>> direcao.valor + 'Norte' + >>> direcao.girar_a_direita() + >>> direcao.valor + 'Leste' + >>> direcao.girar_a_direita() + >>> direcao.valor + 'Sul' + >>> direcao.girar_a_direita() + >>> direcao.valor + 'Oeste' + >>> direcao.girar_a_direita() + >>> direcao.valor + 'Norte' + >>> direcao.girar_a_esquerda() + >>> direcao.valor + 'Oeste' + >>> direcao.girar_a_esquerda() + >>> direcao.valor + 'Sul' + >>> direcao.girar_a_esquerda() + >>> direcao.valor + 'Leste' + >>> direcao.girar_a_esquerda() + >>> direcao.valor + 'Norte' + >>> carro = Carro(direcao, motor) + >>> carro.calcular_velocidade() + 0 + >>> carro.acelerar() + >>> carro.calcular_velocidade() + 1 + >>> carro.acelerar() + >>> carro.calcular_velocidade() + 2 + >>> carro.frear() + >>> carro.calcular_velocidade() + 0 + >>> carro.calcular_direcao() + 'Norte' + >>> carro.girar_a_direita() + >>> carro.calcular_direcao() + 'Leste' + >>> carro.girar_a_esquerda() + >>> carro.calcular_direcao() + 'Norte' + >>> carro.girar_a_esquerda() + >>> carro.calcular_direcao() + 'Oeste' +""" \ No newline at end of file diff --git a/oo/pessoa.py b/oo/pessoa.py index b0607d8c3..920d49dac 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -12,6 +12,15 @@ def __init__(self, *filhos, nome=None, idade=35): def comprimentar(self): return f'Olá {id(self)}' + # metodo estatico com uso do decorator @staticmethod + @staticmethod + def metodo_estatico(): + return 42 + + # metodo de class com uso de decorator @classmethod + @classmethod + def nome_e_atributos_de_classe(cls): + return f'{cls} - olhos {cls.olhos}' if __name__ == '__main__': jordan = Pessoa(nome='Jordan', idade=12) @@ -40,8 +49,10 @@ def comprimentar(self): print(id(Pessoa.olhos), id(harold.olhos), id(jordan.olhos)) print(harold.__dict__) print(jordan.__dict__) - - + # chamar do metodo estatico pela class ou pelo objeto + print(Pessoa.metodo_estatico(), harold.metodo_estatico()) + # chamar do metodo de class pela class ou pelo objeto + print(Pessoa.nome_e_atributos_de_classe(), harold.nome_e_atributos_de_classe()) From 5d7ffcdb402b5375bd7fef5e811bb6890cb7cfc5 Mon Sep 17 00:00:00 2001 From: Harold Gautschi Date: Thu, 26 Aug 2021 17:03:10 -0400 Subject: [PATCH 5/6] class Motor e Direcao --- oo/carro.py | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/oo/carro.py b/oo/carro.py index ec31ca27d..9f93ce4f4 100644 --- a/oo/carro.py +++ b/oo/carro.py @@ -90,4 +90,61 @@ >>> carro.girar_a_esquerda() >>> carro.calcular_direcao() 'Oeste' -""" \ No newline at end of file +""" + +class Motor: + def __init__(self): + self.velocidade = 0 + + def acelerar(self): + self.velocidade += 1 + + def frear(self): + if self.velocidade < 2: + self.velocidade = 0 + else: + self.velocidade -= 2 + + +class Direcao: + direcao = ('Norte', 'Leste', 'Sul', 'Oeste') + + def __init__(self): + self.valor = 0 + + def girar_a_direita(self): + if self.valor == 3: + self.valor = direcao[0] + else: + self.valor += 1 + + def girar_a_esquerda(self): + if self.valor == 0: + self.valor = 3 + else: + self.valor -= 1 + + def calcular_direcao(self): + return direcao[self.valor] + + +if __name__ == '__main__': + # Testando o motor + motor = Motor() + print(motor.velocidade) + motor.acelerar() + print(motor.velocidade) + motor.acelerar() + print(motor.velocidade) + motor.acelerar() + print(motor.velocidade) + motor.frear() + print(motor.velocidade) + motor.frear() + print(motor.velocidade) + + # Testando a direção + direcao = Direcao() + print(direcao.valor) + + From 05df4e18d11c14f7ff5f3a95a57541409c61c69b Mon Sep 17 00:00:00 2001 From: Harold Date: Thu, 26 Aug 2021 21:38:12 -0400 Subject: [PATCH 6/6] final and test --- oo/carro.py | 85 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 71 insertions(+), 14 deletions(-) diff --git a/oo/carro.py b/oo/carro.py index 9f93ce4f4..bf1bbb147 100644 --- a/oo/carro.py +++ b/oo/carro.py @@ -12,7 +12,7 @@ A Direção terá a responsabilidade de controlar a direção. Ela oferece os seguintes atributos: -1) Valor de direção com valores possíveis: Norte, Sul, Lest, Oeste +1) Valor de direção com valores possíveis: Norte, Sul, Leste, Oeste 2) Método girar_a_direita 3) Método girar_a_esquerda N @@ -56,7 +56,7 @@ >>> direcao.valor 'Norte' >>> direcao.girar_a_esquerda() - >>> direcao.valor + >>> direcao.valor 'Oeste' >>> direcao.girar_a_esquerda() >>> direcao.valor @@ -100,34 +100,59 @@ def acelerar(self): self.velocidade += 1 def frear(self): - if self.velocidade < 2: - self.velocidade = 0 - else: - self.velocidade -= 2 - + #if self.velocidade < 2: + # self.velocidade = 0 + #else: + # self.velocidade -= 2 + self.velocidade -= 2 + self.velocidade = max(0, self.velocidade) class Direcao: direcao = ('Norte', 'Leste', 'Sul', 'Oeste') def __init__(self): - self.valor = 0 + self.valor = Direcao.direcao[0] def girar_a_direita(self): - if self.valor == 3: - self.valor = direcao[0] + if self.valor == 'Oeste': + self.valor = Direcao.direcao[0] else: - self.valor += 1 + self.valor = Direcao.direcao[Direcao.direcao.index(self.valor)+1] def girar_a_esquerda(self): - if self.valor == 0: - self.valor = 3 + if self.valor == 'Norte': + self.valor = Direcao.direcao[3] else: - self.valor -= 1 + self.valor = Direcao.direcao[Direcao.direcao.index(self.valor)-1] def calcular_direcao(self): return direcao[self.valor] +class Carro: + def __init__(self, direcao, motor): + self.direcao = direcao + self.motor = motor + + def calcular_velocidade(self): + return self.motor.velocidade + + def acelerar(self): + self.motor.acelerar() + + def frear(self): + self.motor.frear() + + def calcular_direcao(self): + return self.direcao.valor + + def girar_a_direita(self): + self.direcao.girar_a_direita() + + def girar_a_esquerda(self): + self.direcao.girar_a_esquerda() + + if __name__ == '__main__': # Testando o motor motor = Motor() @@ -146,5 +171,37 @@ def calcular_direcao(self): # Testando a direção direcao = Direcao() print(direcao.valor) + direcao.girar_a_direita() + print(direcao.valor) + direcao.girar_a_direita() + print(direcao.valor) + direcao.girar_a_direita() + print(direcao.valor) + direcao.girar_a_direita() + print(direcao.valor) + direcao.girar_a_esquerda() + print(direcao.valor) + direcao.girar_a_esquerda() + print(direcao.valor) + direcao.girar_a_esquerda() + print(direcao.valor) + direcao.girar_a_esquerda() + print(direcao.valor) + #t Testando o carro + carro = Carro(direcao, motor) + print(carro.calcular_velocidade()) + carro.acelerar() + print(carro.calcular_velocidade()) + carro.acelerar() + print(carro.calcular_velocidade()) + carro.frear() + print(carro.calcular_velocidade()) + print(carro.calcular_direcao()) + carro.girar_a_direita() + print(carro.calcular_direcao()) + carro.girar_a_esquerda() + print(carro.calcular_direcao()) + carro.girar_a_esquerda() + print(carro.calcular_direcao())