I did not understand how the value (self) in "city.status = self" inside the function add_city ()

0
class Estado:

    def __init__(self, nome, sigla):
        self.nome = nome
        self.sigla = sigla
        self.cidades = []

    def adiciona_cidade(self, cidade):
        #essa linha abaixo que eu não entendi o que significa
        cidade.estado = self
        self.cidades.append(cidade)

    def populacao(self):
        #O loop abaixo significa: para cada item de
        #c.populacao (que é: cidade.populacao) em self.cidades.
        return sum([c.populacao for c in self.cidades])

class Cidade:

    def __init__(self, nome, populacao):
        self.nome = nome
        self.populacao = populacao
        self.estado = None

    def __str__(self):
        return "Cidade (nome=%s, populacao=%d, estado=%s)" %(
            self.nome, self.populacao, self.estado)


# Populações obtidas no site da Wikipédia
# IBGE estimativa 2012
am = Estado("Amazonas", "AM")
am.adiciona_cidade(Cidade("Manaus", 1861838))
am.adiciona_cidade(Cidade("Parintins", 103828))
am.adiciona_cidade(Cidade("Itacoatiara", 89064))

sp = Estado("São Paulo", "SP")
sp.adiciona_cidade(Cidade("São Paulo", 11376685))
sp.adiciona_cidade(Cidade("Guarulhos", 1244518))
sp.adiciona_cidade(Cidade("Campinas", 1098630))

rj = Estado("Rio de Janeiro", "RJ")
rj.adiciona_cidade(Cidade("Rio de Janeiro", 6390290))
rj.adiciona_cidade(Cidade("São Gonçalo", 1016128))
rj.adiciona_cidade(Cidade("Duque de Caixias", 867067))


for estado in  [am, sp, rj]:
    print("Estado: %s Sigla: %s" % (estado.nome, estado.sigla))
    for cidade in estado.cidades:
        print("Cidade: %s População: %d" % (cidade.nome, cidade.população))
    print("População do Estado: %d\n" % estado.população())
    
asked by anonymous 11.01.2018 / 19:49

1 answer

1

The self in Python is equivalent to this in Javascript, Java, C ++ and others - and refers to the object itself.

In this case, you are seeing self within a state class method - then the self is the state itself that has to be placed in the city. It simply fills this information in the other object (city). .

Unlike other languages, however, self in Python is explicit: it is received as the first parameter within a method, and is usually called self - and does not "appear out of nowhere" as the this in the languages I quoted. The name "self" is used by convention, and you could use any other name (in the first parameter and in the assignment), that the program would work the same way.

    
11.01.2018 / 20:08