Как избежать использования данных класса, совместно используемых экземплярами в Python?

Атрибуты класса - это атрибуты, которые принадлежат самому классу. Они будут использоваться всеми экземплярами класса. Поэтому они имеют одинаковое значение для каждого экземпляра. Мы определяем атрибуты класса вне всех методов, обычно они помещаются сверху, прямо под заголовком класса. С другой стороны, атрибуты экземпляра принадлежат конкретным экземплярам класса. Это означает, что для двух разных экземпляров атрибуты экземпляра обычно различаются. Переменные экземпляра определяются внутри метода, обычно __new__ или __init__, и они являются локальными для этого экземпляра. Разница в том, что атрибут класса разделяется всеми экземплярами. Атрибут экземпляра уникален для этого экземпляра.

Атрибуты класса

 
class a:
    list=[]
y=a()
x=a()
x.list.append('a')
y.list.append('b')
x.list.append('c')
y.list.append('d')
print (x.list)
print (y.list)
output
['a', 'b', 'c', 'd']
['a', 'b', 'c', 'd']

Атрибуты экземпляра

 
class a:
  def __init__(self):
      self.list = []
y=a()
x=a()
x.list.append('a')
y.list.append('b')
x.list.append('c')
y.list.append('d')
print (x.list)
print (y.list)
output
['a', 'c']
['b', 'd']

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

Источник: http://net-informations.com/python/iq/shared.htm

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector