es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Creando Objetos Distintos en Python Utilizando Bucles

Tengo el siguiente código Python:

from names import getfirstname, getlastname

class Person(object):
    def init(self, firstname=getfirstname(), lastname=getlastname()):
        self.firstname = firstname
        self.lastname = lastname

def makegroupofpeople(numpeople):
    people = []
    num = 0
    while num < numpeople:
        person = Person(
            firstname=getfirstname(),
            lastname=getlast_name(),
        )
        people.append(person)
        num += 1
    return people

group = makegroupof_people(3)

for person in group:
    print(f"NEW PERSON {group.index(person)}")
    print(person.firstname)
    print(person.lastname)

Lo que imprime diferentes nombres, así:

NUEVA PERSONA 0
Christine
Thomas
NUEVA PERSONA 1
Orlando
Goff
NUEVA PERSONA 2
William
Bedwell

Lo que no entiendo es que cuando ejecuto este código Python muy similar:

“`python
from names import getfirstname, getlastname

class Person():
def init(self, firstname=getfirstname(), lastname=getlastname()):
self.firstname = firstname
self.lastname = lastname

def makegroupofpeople2(numpeople):
people = []
num = 0
while num < numpeople:
person = Person() ### AQUÍ ESTÁ LO QUE ES DIFERENTE ###
people.append(person)
num += 1
return people

samenamedgroup = makegroupofpeople2(3)

for person in samenamedgroup:
print(f”NUEVA PERSONA {same_named_group.index(person)}”)
print(person.firstname)
print(person.lastname)

Obtengo esta salida, lo que indica que cada objeto tiene los nombres y apellidos:

NUEVA PERSONA 0
Michael
Baylock
NUEVA PERSONA 1
Michael
Baylock
NUEVA PERSONA 2
Michael
Baylock

Lo que me confunde es que esperaría que ambos fragmentos de código imprimieran nombres diferentes, ya que en ambos casos los valores predeterminados denombre de pila yapellido de laclasePersona son los resultados de las funciones generadoras de nombre aleatorio del paquete de nombres, pero claramente eso no es lo que está sucediendo.

He visto esta pregunta, pero no responde completamente lo que estoy viendo.

¿Alguna idea de por qué sucede esto? ¿Y es esto consistente en todos los lenguajes de programación orientados a objetos?

Tags:  ,

Answer

  1. Avatar for davy.ai

    La diferencia entre los dos fragmentos de código es que en el primero, la clase Person está siendo instanciada con las funciones get_first_name() y get_last_name() como parámetros, mientras que en el segundo, se está instanciando la clase Person sin ningún parámetro.

    La razón por la cual el segundo fragmento de código imprime el mismo nombre para cada objeto es porque las funciones get_first_name() y get_last_name() solo son llamadas una vez, cuando se instanció la clase Person por primera vez. Como las funciones no son llamadas nuevamente, se está utilizando el mismo nombre para cada objeto.

    Este comportamiento es consistente en todos los lenguajes de Programación Orientada a Objetos, ya que se aplica el mismo concepto.

Comments are closed.