如何让一个类返回一个不在__init__中定义的字符串

时间:2014-08-14 21:46:17

标签: python

我正在尝试构建一个从概率分布中抽样的类,并根据该抽样返回一个字符串。目前,我没有像我一样返回字符串,而是获得了一个对象。我知道python类需要一个字符串方法才能正确打印,但是我不确定如何在每次调用方法时返回采样的特定字符串。

class ProbabilityDistribution(object):
  def __init__(self, countMap):
    self.countMap = countMap
    self.total = float(sum(self.countMap.values()))
    self.probMap =  { k: (v / self.total) for k, v in self.countMap.items() }

  def __str__(self):
    ????

  def sample(self):
    sampleVal = random(0,1)
    count = 0.0
    for x in self.countMap.keys():
      count = count + self.probMap[x]
      if count > sampleVal:
        return x

2 个答案:

答案 0 :(得分:2)

__str__应该是在交互式终端中键入print my_obj时有用的对象的表示。

如果您的对象代表概率分布,它应该打印如下:

<ProbabilityDistribution, 3 bins>

ProbabilityDistribution([0.1, 0.3, 0.6])

而不是

2

在我看来,从概率分布中抽样元素的行为不应与印刷价值的行为混合在一起。

如果您需要从分发中抽样并打印它们,请执行以下操作:

for n in range(n_samples):
    x = distribution.sample()
    print x

答案 1 :(得分:0)

您可以在返回之前将sample()值存储在私有字段中。如果您只是在每次想要将对象转换为字符串时调用sample(),那么每次都会得到不同的字符串。这样,当您致电sample()时,您只会获得一个新字符串。将其添加到__init__方法:

self.mostRecentSample = None

并在sample方法中更改此内容:

if count > sampleVal:
    self.mostRecentSample = x
    return x

然后你的__str__方法是这样的:

def __str__(self):
    return str(mostRecentSample)

修改

正如其他人所指出的那样,应该说这是对__str__的一种相当尴尬的用法,并不是该方法的用途。如果可能的话,我会建议您了解如何设计实施方案。