#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 (возможно, но не стоит беспокоиться, ИМХО).