[python-brasil] Sobrecarga de métodos

338 views
Skip to first unread message

Juliano Atanazio

unread,
May 6, 2010, 10:37:47 AM5/6/10
to python...@yahoogrupos.com.br
 

Bom dia.
Antes de mais nada gostaria de esclarecer que estou iniciando em Python a pouco tempo.Descobri que nessa linguagem não existe sobrecarga de métodos.Pesquisei muito, mas achei apenas metade do que eu queria saber.No exemplo abaixo o parâmetro pode ser int ou string:
class Carro: def met1(self,arg): if isinstance(arg,int): print 'Inteiro' elif isinstance(arg,str): print 'String' else: raise TypeError,'Tipo %s não suportado.' % arg.__class__.__name__
Sendo assim gostaria de saber como eu faria para criar uma classe cujo método construtor poderia receber quantidade de parâmetros diferentes.
algo do tipo:
f1 = Funcionario("Chiquinho") # objeto f1 já é criado com o atributo nome='Chiquinho'f2 = Funcionario() # objeto f2 criado sem definição prévia do atributo nome
Obrigado!

[As partes desta mensagem que não continham texto foram removidas]

__._,_.___
Atividade nos últimos dias:
,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia:              |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar  |
| E se você é usuário do BOL lembre-se de cadastrar o       |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´
.

__,_._,___

Marco André Lopes Mendes

unread,
May 6, 2010, 7:37:53 PM5/6/10
to python...@yahoogrupos.com.br
 

Tenho a impressão que é perfeitamente possível fazer o que você quer. Apesar
disso, as chances de você obter uma resposta crescerão muito se você enviar
o link pro código hospedado em algum site que preserve a formatação. Sugiro
este:

http://paste.pocoo.org/

<http://paste.pocoo.org/>Um abraço

Marco André



2010/5/6 Juliano Atanazio <sp_juliano@yahoo.com.br>

> Bom dia.
> Antes de mais nada gostaria de esclarecer que estou iniciando em Python a
> pouco tempo.Descobri que nessa linguagem não existe sobrecarga de
> métodos.Pesquisei muito, mas achei apenas metade do que eu queria saber.No
> exemplo abaixo o parâmetro pode ser int ou string:
> class Carro: def met1(self,arg): if isinstance(arg,int):
> print 'Inteiro' elif isinstance(arg,str):
> print 'String' else: raise
> TypeError,'Tipo %s não suportado.' % arg.__class__.__name__
> Sendo assim gostaria de saber como eu faria para criar uma classe cujo
> método construtor poderia receber quantidade de parâmetros diferentes.
> algo do tipo:
> f1 = Funcionario("Chiquinho") # objeto f1 já é criado com o atributo
> nome='Chiquinho'f2 = Funcionario() # objeto f2 criado sem definição prévia
> do atributo nome
> Obrigado!
>
>
>
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>

> ------------------------------------
>
> ,----------------------------------------------------------.


> | Antes de enviar um e-mail para o grupo leia: |
> | http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
> | E se você é usuário do BOL lembre-se de cadastrar o |
> | e-mail do grupo na lista branca do seu sistema anti-spam. |

> `----------------------------------------------------------´Links do
> Yahoo! Grupos
>
>
>

--
Marco André
marcoandre@gmail.com
http://www.google.com.br/profiles/marcoandre



[As partes desta mensagem que não continham texto foram removidas]

__._,_.___
Atividade nos últimos dias:
,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia:              |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar  |
| E se você é usuário do BOL lembre-se de cadastrar o       |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´
.

__,_._,___

Renato Besen

unread,
May 6, 2010, 8:18:52 PM5/6/10
to python...@yahoogrupos.com.br

2010/5/6 Juliano Atanazio <sp_juliano@yahoo.com.br>

> Sendo assim gostaria de saber como eu faria para criar uma classe cujo
> método construtor poderia receber quantidade de parâmetros diferentes.
> algo do tipo:
> f1 = Funcionario("Chiquinho") # objeto f1 já é criado com o atributo
> nome='Chiquinho'f2 = Funcionario() # objeto f2 criado sem definição prévia
> do atributo nome
> Obrigado!
>

Você pode definir um argumento padrão[1]:
>>> def default(name = None):
... print(name if name else "Nenhum nome definido")
...
>>> default()
Nenhum nome definido
>>> default("Renato")
Renato
>>>

[1] http://docs.python.org/tutorial/controlflow.html#default-argument-values

Abs.

--
Renato Besen
http://onca.st/



[As partes desta mensagem que não continham texto foram removidas]

__._,_.___
Atividade nos últimos dias:
,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia:              |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar  |
| E se você é usuário do BOL lembre-se de cadastrar o       |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´
.

__,_._,___

Luiz Fernando

unread,
May 6, 2010, 8:24:45 PM5/6/10
to python...@yahoogrupos.com.br

2010/5/6 Juliano Atanazio <sp_juliano@yahoo.com.br>

> Bom dia.
> Antes de mais nada gostaria de esclarecer que estou iniciando em Python a
> pouco tempo.Descobri que nessa linguagem não existe sobrecarga de
> métodos.Pesquisei muito, mas achei apenas metade do que eu queria saber.No
> exemplo abaixo o parâmetro pode ser int ou string:
> class Carro: def met1(self,arg): if isinstance(arg,int):
> print 'Inteiro' elif isinstance(arg,str):
> print 'String' else: raise
> TypeError,'Tipo %s não suportado.' % arg.__class__.__name__
> Sendo assim gostaria de saber como eu faria para criar uma classe cujo
> método construtor poderia receber quantidade de parâmetros diferentes.
> algo do tipo:
> f1 = Funcionario("Chiquinho") # objeto f1 já é criado com o atributo
> nome='Chiquinho'f2 = Funcionario() # objeto f2 criado sem definição prévia
> do atributo nome
> Obrigado!
>
>

Meio off-topic...

Quando for verificar se uma variável é uma string não faça

isinstance(arg, str)

Faça

isinstance(arg, basestring)

Veja:

>>> arg = 'string'
>>> isinstance(arg, str)
True
>>> isinstance(arg, basestring)
True
>>> arg = u'unicode'
>>> isinstance(arg, str)
False
>>> isinstance(arg, basestring)
True

--
Luiz Armesto

http://stoa.usp.br/luizarmesto/
luiz.armesto@gmail.com (email, gtalk, msn)

OpenPGP key: 0734D00A



[As partes desta mensagem que não continham texto foram removidas]

__._,_.___
Atividade nos últimos dias:
,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia:              |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar  |
| E se você é usuário do BOL lembre-se de cadastrar o       |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´
.

__,_._,___

Luciano Pacheco

unread,
May 6, 2010, 9:02:42 PM5/6/10
to python...@yahoogrupos.com.br

2010/5/6 Juliano Atanazio <sp_juliano@yahoo.com.br>

> Bom dia.
> Antes de mais nada gostaria de esclarecer que estou iniciando em Python a
> pouco tempo.Descobri que nessa linguagem não existe sobrecarga de
> métodos.Pesquisei muito, mas achei apenas metade do que eu queria saber.No
> exemplo abaixo o parâmetro pode ser int ou string:
> class Carro: def met1(self,arg): if isinstance(arg,int):
> print 'Inteiro' elif isinstance(arg,str):
> print 'String' else: raise
> TypeError,'Tipo %s não suportado.' % arg.__class__.__name__
> Sendo assim gostaria de saber como eu faria para criar uma classe cujo
> método construtor poderia receber quantidade de parâmetros diferentes.
> algo do tipo:
> f1 = Funcionario("Chiquinho") # objeto f1 já é criado com o atributo
> nome='Chiquinho'f2 = Funcionario() # objeto f2 criado sem definição prévia
> do atributo nome
> Obrigado!
>

Você pode usar valor padrão no seu parâmetro ou usar args e kwargs.

Procure por "python args kwargs" que vc acha a explicação. :-)

Até mais,
--
Luciano Pacheco
blog.lucmult.com.br



[As partes desta mensagem que não continham texto foram removidas]

__._,_.___
Atividade nos últimos dias:
,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia:              |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar  |
| E se você é usuário do BOL lembre-se de cadastrar o       |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´
.

__,_._,___

Rogério Tomassoni

unread,
May 6, 2010, 7:43:30 PM5/6/10
to python...@yahoogrupos.com.br
 

Galera alguem sabe de algum livro ou tutorial que me ajude desenvolver aplicativos com interface gráfica com Python?

Estou tentanto usar o Netbeans + GTK mas tenho o seguinte erro

Traceback (most recent call last):
File "H:\Workspace Python\Primeiros\1NB\NB1a\src\NB1a.py", line 8, in <module>
import gtk
ImportError: No module named gtk

Não sei como corrigir isso. Tenho os seguintes aplicativos instalados
pycairo-1.8.6.win32-py2.6.exe
pygobject-2.20.0.win32-py2.6.exe
pygtk-2.16.0.win32-py2.6.exe
pygtk-2.16.0+glade.win32-py2.6.exe

Código:

__author__="Tomassoni"
__date__ ="$02/05/2010 18:31:09$"

# -*- coding: utf-8 -*-

import subprocess
import gtk
import gtk.glade

class Exec(object):
#Janela principal.
def __init__(self):
#Inicializa a classe.
# Carrega a interface
self.tree = gtk.glade.XML('cmd.glade', 'main')
# Liga os eventos
callbacks = {
'on_main_destroy': self.on_main_destroy,
'on_btn_fechar_clicked': self.on_main_destroy,
'on_btn_rodar_clicked': self.on_btn_rodar_clicked
}
self.tree.signal_autoconnect(callbacks)

def on_btn_rodar_clicked(self, widget):
#Roda o comando.
ntr_cmd = self.tree.get_widget('ntr_cmd')
chk_shell = self.tree.get_widget('chk_shell')
cmd = ntr_cmd.get_text()
if cmd:
# chk_shell.state será 1 se chk_shell estiver marcado
if chk_shell.state:
cmd = 'cmd start cmd /c ' + cmd
subprocess.Popen(args=cmd)
else:
# Caixa de dialogo
dialog = gtk.MessageDialog(parent=self.tree.get_widget('main'),
flags=gtk.DIALOG_MODAL |
gtk.DIALOG_DESTROY_WITH_PARENT,
type=gtk.MESSAGE_OTHER, buttons=gtk.BUTTONS_OK,
message_format='Digite um comando.')
dialog.set_title('Mensagem')
dialog.set_position(gtk.WIN_POS_CENTER_ALWAYS)
# Exibe a caixa
dialog.run()
dialog.destroy()
return True
def on_main_destroy(self, widget):
#Termina o programa.
raise SystemExit
if __name__ == "__main__":
# Inicia a GUI
exe = Exec()
gtk.main()

Exemplo de um livro. mas so da pani.
Alguem pode me ajudar a iniciar?



[As partes desta mensagem que não continham texto foram removidas]

__._,_.___
Atividade nos últimos dias:
,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia:              |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar  |
| E se você é usuário do BOL lembre-se de cadastrar o       |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´
.

__,_._,___

Junior Polegato - Linux

unread,
May 7, 2010, 7:40:46 AM5/7/10
to python...@yahoogrupos.com.br

Em 06-05-2010 20:43, Rogério Tomassoni escreveu:
> Galera alguem sabe de algum livro ou tutorial que me ajude desenvolver aplicativos com interface gráfica com Python?
> Estou tentanto usar o Netbeans + GTK mas tenho o seguinte erro
> Traceback (most recent call last):
> File "H:\Workspace Python\Primeiros\1NB\NB1a\src\NB1a.py", line 8, in<module>
> import gtk
> ImportError: No module named gtk
> Não sei como corrigir isso. Tenho os seguintes aplicativos instalados
> pycairo-1.8.6.win32-py2.6.exe
> pygobject-2.20.0.win32-py2.6.exe
> pygtk-2.16.0.win32-py2.6.exe
> pygtk-2.16.0+glade.win32-py2.6.exe
>

Olá!

Falta a biblioteca (dll) do GTK+ feita em C. Esses módulos
"apenas" fazem as chamadas para as funções presentes na biblioteca em C
do GTK+. Instale o pacote com a última versão do Glade e GTK juntos de
[1], que podem sempre ser encontrados a partir de [2].

[1]
http://ftp.gnome.org/pub/GNOME/binaries/win32/glade3/3.6/glade3-3.6.7-with-GTK+.exe
[2] http://glade.gnome.org/

[]'s
Junior Polegato

__._,_.___
Atividade nos últimos dias:
,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia:              |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar  |
| E se você é usuário do BOL lembre-se de cadastrar o       |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´
.

__,_._,___

Henrique Baggio

unread,
May 7, 2010, 9:37:11 AM5/7/10
to python...@yahoogrupos.com.br
 

2010/5/6 Luciano Pacheco <lucmult@gmail.com>

> 2010/5/6 Juliano Atanazio <sp_juliano@yahoo.com.br<sp_juliano%40yahoo.com.br>


> >
>
> > Bom dia.
> > Antes de mais nada gostaria de esclarecer que estou iniciando em Python a
> > pouco tempo.Descobri que nessa linguagem não existe sobrecarga de
> > métodos.Pesquisei muito, mas achei apenas metade do que eu queria saber.
>

>

[cut]


>

> Você pode usar valor padrão no seu parâmetro ou usar args e kwargs.
>
> Procure por "python args kwargs" que vc acha a explicação. :-)
>
>

E nesse caso, o tutorial oficial é a primeira parada (não só pra esse tema,
mas pra muitos outros)

http://docs.python.org/tutorial/controlflow.html#more-on-defining-functions

--
Henrique F. Baggio
Computer Engineering - Unicamp

Microsoft Innovation Center - Unicamp
Software Engineer
http://www.lms.ic.unicamp.br
http://lmsu.codeplex.com



[As partes desta mensagem que não continham texto foram removidas]

__._,_.___
Atividade nos últimos dias:
,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia:              |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar  |
| E se você é usuário do BOL lembre-se de cadastrar o       |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´
.

__,_._,___

Luciano Ramalho

unread,
May 7, 2010, 10:47:08 AM5/7/10
to python...@yahoogrupos.com.br

2010/5/7 Henrique Baggio <hnrqbaggio@gmail.com>:
> 2010/5/6 Luciano Pacheco <lucmult@gmail.com>
>
>> 2010/5/6 Juliano Atanazio <sp_juliano@yahoo.com.br<sp_juliano%40yahoo.com.br>
>> >
>>
>> > Bom dia.
>> > Antes de mais nada gostaria de esclarecer que estou iniciando em Python a
>> > pouco tempo.Descobri que nessa linguagem não existe sobrecarga de
>> > métodos.Pesquisei muito, mas achei apenas metade do que eu queria saber.
>>
>
>>
> [cut]
>>
>
>> Você pode usar valor padrão no seu parâmetro ou usar args e kwargs.
>>
>> Procure por "python args kwargs" que vc acha a explicação. :-)
>>
>>
> E nesse caso, o tutorial oficial é a primeira parada (não só pra esse tema,
> mas pra muitos outros)
>
> http://docs.python.org/tutorial/controlflow.html#more-on-defining-functions

Mandou muito bem, Henrique.

Aos novatos, a dica mais útil de todas: invista o tempo e leia o
tutorial oficial de Python, disponível inclusive em portuguẽs:

http://www.python.org.br/wiki/TutorialPython

A versão em português refere-se ao Python 2.4 mas tudo o que tem lá
funciona no Python 2.6, e o que tem de novo no Python 2.6 não passa de
5% do total que é igual nas duas versões.

[ ]s
Luciano

__._,_.___
Atividade nos últimos dias:
,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia:              |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar  |
| E se você é usuário do BOL lembre-se de cadastrar o       |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´
.

__,_._,___
Reply all
Reply to author
Forward
0 new messages