#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon May 31 22:24:25 2021

@author: ojacques
"""

#Exemplo self
class Pessoa(object):
    def setNome(alguem, nome):
        if len(nome) >= 2:
            alguem.nome = nome

mulher = Pessoa() #cria a instância (objeto) mulher

# Nome da classe deve vir antes do uso da função, pois
# a função está dentro da classe.

Pessoa.setNome(mulher, 'Juliana') # ficar chamando o nome da classe pode ser
                                  # redundante

# Vai imprimir "Juliana"
print(mulher.nome)

#Não tem sentido mulher.setNome(mulher, 'Juliana')

class Pessoa(object):
    def setNome(alguem, name):
        if len(name) >= 2:
            alguem.name = name

mulher = Pessoa() #cria a instância (objeto) mulher

# Para chamar métodos, tanto faz chamá-los como em Classe.metodo(objeto, parametros) 
# quanto chamá-los como em objeto.metodo(parametros)
# Isto é tanto faz, Pessoa.setNome(mulher,nome) ou mulher.setNome(nome)

mulher.setNome(mulher, 'Juliana') #chama o objeto antes da função e depois usa o 
                                  #objeto como parâmetro

# Vai imprimir "Juliana"
print(mulher.nome)

#Em Pessoa.setNome o primeiro parâmetro é alguem. Entretanto é padrão chamá-lo de self
#Não é obrigatório, mas via de regra é melhor utilizar self como primeiro parâmetro
#dos métodos

class Pessoa(object):
    def setNome(self, nome): #self explícito é melhor que implícito, filosofia Python
        if len(name) >= 2:
            self.nome = nome

mulher = Pessoa() #cria a instância (objeto) mulher

# Nome da classe deve vir antes do uso da função, pois
# a função está dentro da classe.

mulher.setNome('Juliana') 

print(mulher.nome)

