是否存在关于如何使方法和函数执行相同操作(或者是否完全执行此操作)的约定?
例如,考虑一下
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)
或者只是一起摆脱这个方法而只是有一个功能?或者别的什么?
答案 0 :(得分:0)
这是一个替代方案,仍允许您将逻辑封装在MyDie
中。在MyDie
@staticmethod
def count_specified_values(random_func, number_of_values):
return Counter([randoms_func() for n in range(number_of_values)])
您还可以使用默认值向构造函数添加其他形式参数,您可以覆盖它们以实现相同的功能。