![](/img/trans.png)
[英]How do I define an argument in a method only if it isn't defined in __init__()?
[英]How to have a class return a string that isn't defined in __init__
我正在尝试建立一个从概率分布中采样并基于该采样返回字符串的类。 目前,我没有得到我想要的字符串,而是得到了一个对象。 我知道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
__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
您可以让sample()
在返回值之前将值存储在私有字段中。 如果您每次想将对象转换为字符串时都简单地调用sample()
每次都会获得一个不同的字符串。 这样,您只有在调用sample()
时才能获得新的字符串。 将此添加到__init__
方法中:
self.mostRecentSample = None
并在sample
方法中对此进行更改:
if count > sampleVal:
self.mostRecentSample = x
return x
然后您的__str__
方法是这样的:
def __str__(self):
return str(mostRecentSample)
正如其他人所指出的,应该说这是__str__
的相当尴尬的用法,而不是该方法的目的。 如果可能的话,我建议您看看还能如何设计实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.