Orientação a Objeto em Python

1. Orientação a Objeto em Python

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/03/2016 - 00:14h

Estive lendo sobre orientação a objeto em Python, pelo menos para Python2.
Senti um toque de gambiarra no tocante a variáveis privadas e protegidas.
Gostaria de que alguém pudesse desfazer esta impressão.

Sei que Python 2 é incompatível com Python 3.

----------------------------------------------------------------------------------------------------------------
http://imgur.com/gBIwI1l

# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



  


2. Re: Orientação a Objeto em Python

M.
XProtoman

(usa Fedora)

Enviado em 10/03/2016 - 01:16h

Boa noite Listeiro,

A técnica é essa?
http://radek.io/2011/07/21/private-protected-and-public-in-python/


3. Re: Orientação a Objeto em Python

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/03/2016 - 01:34h

Olá.

O texto que comecei a ler sobre Python 2(.7) era este

http://turing.com.br/pydoc/2.7/tutorial/classes.html

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



4. Re: Orientação a Objeto em Python

M.
XProtoman

(usa Fedora)

Enviado em 10/03/2016 - 02:17h

listeiro_037 escreveu:

Olá.

O texto que comecei a ler sobre Python 2(.7) era este

http://turing.com.br/pydoc/2.7/tutorial/classes.html

A ideia parece que é a mesma(private).

Não conhecia, parece que a mesma informação do link que você passou está presente no doc do Python 3:
https://docs.python.org/3/tutorial/classes.html#private-variables


5. Re: Orientação a Objeto em Python

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/03/2016 - 03:04h

A parte que deixou mais dúvida foi esta:

(...)

9.4. Observações aleatórias

Atributos de dados sobrescrevem atributos métodos homônimos. Para evitar conflitos de nome acidentais, que podem gerar bugs de difícil rastreio em programas extensos, é sábio adotar algum tipo de convenção que minimize a chance de conflitos. Convenções comuns incluem: definir nomes de métodos com inicial maiúscula, prefixar atributos de dados com uma string única (quem sabe “_” [underscore ou sublinhado]), ou usar sempre verbos para nomear métodos e substantivos para atributos de dados.

Atributos de dados podem ser referenciados por métodos da própria instância, bem como por qualquer outro usuário do objeto (também chamados “clientes” do objeto). Em outras palavras, classes não servem para implementar tipos puramente abstratos de dados. De fato, nada em Python torna possível assegurar o encapsulamento de dados — tudo é convenção. (Por outro lado, a implementação de Python, escrita em C, pode esconder completamente detalhes de um objeto ou controlar seu acesso, se necessário; isto pode ser utilizado por extensões de Python escritas em C.)

Clientes devem utilizar atributos de dados com cuidado, pois podem bagunçar invariantes assumidas pelos métodos ao esbarrar em seus atributos de dados. Note que clientes podem adicionar à vontade atributos de dados a uma instância sem afetar a validade dos métodos, desde que seja evitado o conflito de nomes. Novamente, uma convenção de nomenclatura poupa muita dor de cabeça.

Frequentemente, o primeiro argumento de um método é chamado self. Isso não passa de uma convenção: o identificador self não é uma palavra reservada nem possui qualquer significado especial em Python. Mas note que, ao seguir essa convenção, seu código se torna legível por uma grande comunidade de desenvolvedores Python e é possível que alguma IDE dependa dessa convenção para analisar seu código.

(...)


----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



6. Re: Orientação a Objeto em Python

shoujo
shoujo

(usa Slackware)

Enviado em 10/03/2016 - 07:16h

Esse texto esta alertando para tomar cuidado ao criar métodos e classes e não repetir nomes pois no Python tudo é como se fosse um objeto e são muito volateis.

A segunda parte fala do self.. No Python o self é tipo o this no java... A diferença esta na forma com que vc consegue acessar as variáveis.. Por exemplo no java quando voce esta dentro de uma classe, voce pode criar variáveis que funcionam em qualquer parte da classe, sem a necessidade de referenciar elas ao método, desde que ela seja criada no escopo global da classe. Já no Python, se a variável for desse atributo self, vc tem acesso a ela em qualquer lugar da classe, porem as variáveis self so podem ser criadas ao construir a classe.. Já as outras variáveis criadas sem o self so funcionarao no referido método que forem criadas.

Pelo menos é isso que eu acho que entendi


7. Re: Orientação a Objeto em Python

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/03/2016 - 08:30h

Ok. Agora o ponto que não entendi: como fica a sobrecarga e a herança?
A minha experiência é maior com C++ do que com Java.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



8. Re: Orientação a Objeto em Python

M.
XProtoman

(usa Fedora)

Enviado em 10/03/2016 - 14:05h

Sobre herança veja isso que fiz:


#!/usr/bin/env python3

class A:
def __init__(self):
return;

class B(A):
def __init__(self):
A.__init__(self);

class C:
def __init__(self):
A.__init__(self);

class D(A):
def __init__(self):
return;

class E(B, A):
def __init__(self):
B.__init__(self);

a = A();
b = B();
c = C();
d = D();
e = E();

print(isinstance(a, A));
print(isinstance(b, A));
print(isinstance(c, A));
print(isinstance(d, A));
print(isinstance(e, A));


Resultado da execução:

$ python3 heranca.py
True
True
False
True
True


D pelo o que entendo recebe uma herança virtual de A, também acontece em E.

Em E para herança virtual de A dar certo você tem que colocar exatamente nessa ordem (B, A), porque (A, B) não é aceito por Python:
Traceback (most recent call last):
File "heranca.py", line 19, in <module>
class E(A, B):
TypeError: Cannot create a consistent method resolution
order (MRO) for bases A, B


Note que C não é herdeiro de A(o único FALSE dos testes), porém executa o construtor de A.

Note que B é o que todo mundo quer e a maioria deve fazer, B é herança de A e executa o construtor de A.

PS: Python é bonito e bacana! :D


9. Re: Orientação a Objeto em Python

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/03/2016 - 23:40h

Beleza. Então devo ter entendido algumas partes errado.
Vou deglutir com calma estes exemplos.
Tá parecendo que tem nada de diferente.
E isso mesmo, classe virtual, uma dúvida que tinha.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



10. Re: Orientação a Objeto em Python

Lisandro Guerra
Lisandro

(usa Arch Linux)

Enviado em 14/03/2016 - 20:41h

shoujo escreveu:

Esse texto esta alertando para tomar cuidado ao criar métodos e classes e não repetir nomes pois no Python tudo é como se fosse um objeto e são muito volateis.

A segunda parte fala do self.. No Python o self é tipo o this no java... A diferença esta na forma com que vc consegue acessar as variáveis.. Por exemplo no java quando voce esta dentro de uma classe, voce pode criar variáveis que funcionam em qualquer parte da classe, sem a necessidade de referenciar elas ao método, desde que ela seja criada no escopo global da classe. Já no Python, se a variável for desse atributo self, vc tem acesso a ela em qualquer lugar da classe, porem as variáveis self so podem ser criadas ao construir a classe.. Já as outras variáveis criadas sem o self so funcionarao no referido método que forem criadas.

Pelo menos é isso que eu acho que entendi


Isso aí. Tudo é objeto.


11. Re: Orientação a Objeto em Python

Lisandro Guerra
Lisandro

(usa Arch Linux)

Enviado em 14/03/2016 - 20:42h

listeiro_037 escreveu:

Ok. Agora o ponto que não entendi: como fica a sobrecarga e a herança?
A minha experiência é maior com C++ do que com Java.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Sei como é. Mindset de C++ e Java fica difícil de entender o Python. Tem que se libertar.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts