Какой эквивалент переменной класса @@ Ruby в Python?

#python #ruby #class-variables

#python #ruby #переменные класса

Вопрос:

В Ruby 1.9 я могу использовать ее переменную класса следующим образом:

 class Sample
  @@count = 0

  def initialize
    @@count  = 1
  end

  def count
    @@count
  end
end

sample = Sample.new
puts sample.count     # Output: 1

sample2 = Sample.new
puts sample2.count    # Output: 2
  

Как я могу достичь вышеуказанного в Python 2.5 ?

Комментарии:

1. Возможно, вам захочется уточнить, хотите ли вы, чтобы поведение было таким же, как у переменной класса или переменной экземпляра одноэлементного класса ( class << Sample; attr_accessor :count; end ). Первая переменная является общей для Sample и любого подкласса, в то время как более поздняя будет отличаться для Sample и подкласса.

Ответ №1:

 class Sample(object):
  _count = 0

  def __init__(self):
    Sample._count  = 1

  @property
  def count(self):
    return Sample._count
  

Использование немного отличается от Ruby; например, если у вас есть этот код в модуле a.py ,

 >>> import a
>>> x = a.Sample()
>>> print x.count
1
>>> y = a.Sample()
>>> print x.count
2
  

наличие Sample.count «свойства класса» (с тем же именем, что и у свойства экземпляра) было бы немного сложно в Python (возможно, но не стоит беспокоиться, ИМХО).