Ir para conteúdo
Fórum Script Brasil
  • 0

Descobrir A A Classe De Um Objeto E Metodos _get_ E _set_


AAguiar

Pergunta

Olá pessoal.

Sou novo no forum e no uso de Python. porém programo com Java a algum tempo.

Minha duvida é a seguinte:

Criei a classe Aluno

class Aluno:
      # O nome do Aluno
      nome       = None
      # RGM = Registro geral de matricula
      rgm        = None
      # Data de nascimento.
      nascimento = None
      # Idade.
      idade      = None
      # Turma.
      turma      = None

      def _set_nome(self,nome):
          self.nome = nome
          print 'Metodo get chamado'

      # Construtor do Aluno
      def __init__(self, nome, rgm, idade):
          self._nome  = nome
          self._rgm   = rgm
          self._idade = idade

      def __str__(self):
          return 'Nome: %s, RGM:%s' % (self._nome,self._rgm)

então instanciei um objeto aluno:

aluno = Aluno('Joao','3242-3',10)

como faço para descobrir a classe dele ? pois quando dou um type(aluno) vem apenas <type 'instance'>

e outra duvida.

vi num blog que quando voce seta um atributo de um objeto tipo aluno.nome = 'Maria' o python por baixo dos panos chama um tal de _set_, tem como eu sobreescrever este método? tipo os get e set de C#?

Grato a todos.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Para obter o nome da classe você pode fazer:

print a.__class__
E para customizar o acesso de escrita aos atributos você pode sobrescrever o método __setattr__:
class Aluno:
      ...

      def __setattr__(self, name, value):
          print "Atribuindo o valor '%s' ao atributo '%s'" % (value, name)
          self.__dict__[name] = value
>>> a = Aluno("Aguiar", "10", 23)
Atribuindo o valor 'Aguiar' ao atributo '_nome'
Atribuindo o valor '10' ao atributo '_rgm'
Atribuindo o valor '23' ao atributo '_idade'
>>> a.nome = "AAguiar"
Atribuindo o valor 'AAguiar' ao atributo 'nome'
>>>

Certo? ;)

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

valeu cara, só mais uma duvida.. sem querer ser chato mais já sendo:

só confirmando minhas suspeitas:

todos os metodos __<alguma coisa>__ como __str__(), __add__() são funções builtin que são padrão de todas as classes em python e muitos são sobrecargas de operadores.

estou certo

Ah e tipo eu posso criar operadores novos e assossialos a algum método builtin?

Grato.

Link para o comentário
Compartilhar em outros sites

  • 0
valeu cara, só mais uma duvida.. sem querer ser chato mais já sendo:

só confirmando minhas suspeitas:

todos os metodos __<alguma coisa>__ como __str__(), __add__() são funções builtin que são padrão de todas as classes em python e muitos são sobrecargas de operadores.

estou certo

Basicamente sim. Por exemplo, reescrevendo o método __len__() de uma classe você estará indicando o que deverá ser retornado quando a operação len(objeto) for realizada com o objeto.

Ah e tipo eu posso criar operadores novos e assossialos a algum método builtin?

Que eu saiba, não. Você só pode alterar os que já existem. Ou pode fazer o que acontece com __str__() e str() e __len__() e len(), que é simplesmente retornar o valor do método para a função.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...