Jump to content
Fórum Script Brasil
  • 0

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


AAguiar
 Share

Question

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 to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.7k
×
×
  • Create New...