2016-07-31 54 views
0

是否有一个关于如何同时执行相同操作的方法和函数(或者是否要这样做)的约定?同时拥有一个方法和一个函数吗?

考虑,例如,

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) 

是不是最好这样做如上(其中的代码重复,承担的功能是一个较长一段代码,不只是一条线)或

def count_values(self): 
    return count_values(self, number_of_rolls) 

或只需更换count_values方法摆脱方法一起,只是有一个功能?或者也许别的东西?

回答

0

这是一个替代方案,仍然允许您在MyDie中封装逻辑。在MyDie

@staticmethod 
def count_specified_values(random_func, number_of_values): 
    return Counter([randoms_func() for n in range(number_of_values)]) 

创建一个类的方法你也可以给构造器,你可以重写以实现相同的功能默认值添加额外的形式参数。

相关问题