Python | Evitar el intercambio de datos de clase entre instancias

| | | | | | | | |

Supongamos que tenemos el siguiente fragmento de código:


# Código Python para demostración
# intercambiar trabajo
Número de variables de datos


# Crear una clase

class Geek_Class:

friki = []


x = Geek_Class()

y = Geek_Class()


# Antes de agregar valores ‚Äã‚Äã

x.geek.append ( 1 )

y.geek.append ( 2 )

x.geek.append ( 3 )

y.geek.append ( 4 )


# Imprimir valores ‚Äã‚Äãpara x e y

imprimir (x.geek)

imprimir (y.geek)

Salir:

[1, 2, 3, 4] [1, 2, 3, 4] 

Imprime [1, 2, 3, 4] para x y [1, 2, 3, 4 ] para y. Supongamos que queremos obtener [1, 3] para x y [2, 4] para y. Podemos obtener el resultado deseado de las siguientes formas:

Método # 1 : declarándolos dentro __init__

Declarando variables dentro una declaración de clase hace miembros de su clase, no miembros de instancia. Declararlos dentro del método __init__ asegura que se crea una nueva instancia de miembro junto con cada nueva instancia de objeto, que es lo que queremos.


# código Python para demostración
# trabajo de intercambio
Número de variables de datos


# Crear una clase dentro de __init__

class Geek_Class:

def __ init __ ( self ):

self . geek = []

x = Geek_Class()

y = Geek_Class()


# Agregar valores ‚Äã‚Äã

x.geek.append ( 1 )

y.geek.append (< /código> 2 )

x.geek.append ( 3 )

y.geek.append ( 4 )


# Imprimir valores ‚Äã‚Äãpara x e y

imprimir (x.geek)

imprimir (y.geek)

Salir:

[1, 3] [2, 4 ] 

En el código fuente, no se asigna ningún valor al atributo de lista después de la instanciación; por lo tanto, sigue siendo un atributo de la clase. Definir una lista dentro de __init__ funciona porque se llama a __init__ después de la creación de instancias.

Método n.° 2: mediante la creación de una nueva lista y almacene los valores ‚Äã‚Äãen él.


# Código Python para demostración
# intercambiar trabajo
Número de variables de datos


# Crear una clase

clase Geek_Class:

geek = []


x = Geek_Class()

y = Geek_Class()


# Crear nuevas listas

x.geek = []

y.geek = []


# Agregar valores ‚Äã‚Äã

x.geek.append ( 1 )

y.geek.append ( 2 )

x.geek.append ( 3 < /código> )

y.geek.append ( 4 )


# Imprimir valores ‚Äã‚Äãpara x e y

imprimir (x.geek)

imprimir (y.geek)

Salir:

[1, 3] [2, 4]