Python | Предотвращение обмена данными класса между экземплярами

| | | | | | | | |

Предположим, у нас есть следующий фрагмент кода:


# код Python для демонстрации
# работа обмена
Количество переменных данных


# Создать класс

class Geek_Class:

geek = []


x = Geek_Class ()

y = Geek_Class ()


# Перед добавлением значений ‚Äã‚Äã

x.geek.append ( 1 )

y.geek.append( 2 )

x.geek.append( 3 )

y.geek.append ( 4 )


# Вывести значения ‚Äã‚Äãдля x и y

print (x.geek)

печать (y.geek)

Выход:

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

Выводит [1, 2, 3, 4] вместо x и [1, 2, 3, 4]. ] для тебя. Предположим, мы хотим получить [1, 3] для x и [2, 4] для y. Мы можем получить желаемый результат следующими способами:

Способ №1 : объявление их внутри __init__

Объявление переменных внутри объявление класса делает их членов класса, а не членов экземпляра. Объявление их внутри метода __init__ гарантирует, что новый экземпляр элемента будет создан вместе с каждым новым экземпляром объекта, что нам и нужно.


# код Python для демонстрации
# работа по обмену
Количество переменных данных


# Создайте класс внутри __init__

class Geek_Class:

def __ init __ ( self ):

self . Компьютерщик = []

x = Geek_Class ()

y = Geek_Class ()


# Добавление значений ‚Äã‚Äã

x.geek.append ( 1 )

y.geek.append ( 2 )

x.geek.append ( 3 )

y.geek.append ( 4 )


# Вывести значения ‚Äã‚Äãдля x и y

print (x.geek)

print (y.geek)

Выход:

[1, 3] [2, 4 ] 

В исходном коде атрибуту списка после создания экземпляра не присваивается никакого значения; поэтому он остается атрибутом класса. Определение списка внутри __init__ работает, потому что __init__ вызывается после создания экземпляра.

Способ № 2: путем создания нового списка и сохраните в нем значения.


# Демонстрационный код Python
# работа обмена
Количество переменных данных


# Создать класс

class Geek_Class:

гик = []


x = Geek_Class ()

y = Geek_Class ()


# Создать новые списки

x.geek = []

y.geek = []


# Добавление значений ‚Äã‚Äã

x.geek.append ( 1 )

y.geek.append ( 2 )

x.geek.append ( 3 )

y.geek.append ( 4 )


# Вывести значения ‚Äã‚Äãдля x и y

print (x.geek)

печать (y.geek)

Выход:

[1, 3] [2, 4]