【发布时间】:2016-08-01 01:54:50
【问题描述】:
对于如何让一个方法和一个函数做同样的事情(或者是否完全这样做)有一个约定吗?
例如,考虑
from random import choice
from collections import Counter
class MyDie:
def __init__(self, smallest, largest, how_many_rolls):
self.min = smallest
self.max = largest
self.number_of_rolls = how_many_rolls
def __call__(self):
return choice( range(self.min, self.max+1) )
def count_values(self):
return Counter([self() for n in range(self.number_of_rolls)])
def count_values(randoms_func, number_of_values):
return Counter([randoms_func() for n in range(number_of_values)])
其中count_values 既是方法又是函数。
我认为拥有该方法很好,因为结果“属于” MyDie 对象。此外,该方法可以从MyDie 对象中提取属性,而无需将它们传递给count_values。另一方面,拥有该功能以便对MyDie以外的功能进行操作,例如
count_values(lambda: choice([3,5]) + choice([7,9]), 7)
最好按照上面的方法进行(代码重复;假设函数是一段较长的代码,而不仅仅是一行)还是将count_values方法替换为
def count_values(self):
return count_values(self, number_of_rolls)
或者干脆把方法全部去掉,只用一个函数?还是别的什么?
【问题讨论】: