【问题标题】:What's the equivalent of Ruby's class @@variable in Python?Python 中的 Ruby 类 @@variable 等价于什么?
【发布时间】:2010-04-16 17:51:27
【问题描述】:

在 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+ 中实现上述目标?

【问题讨论】:

  • 如果您想要与类变量或单例类的实例变量 (class << Sample; attr_accessor :count; end) 具有相同的行为,您可能需要精确。第一个在 Sample 和任何子类之间共享,而后者对于 Sample 和子类是不同的。

标签: python ruby class-variables


【解决方案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 “类属性”(与 instance 属性同名)在 Python 中会有点棘手(可行,但恕我直言不值得费心)。

【讨论】:

    猜你喜欢
    • 2011-05-05
    • 1970-01-01
    • 2019-08-15
    • 2012-11-26
    • 1970-01-01
    • 2011-08-18
    • 2019-03-14
    • 2015-03-20
    • 2014-12-29
    相关资源
    最近更新 更多