2016-07-31 2 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에 캡슐화 할 수있는 대체 방법이 있습니다. 당신은 또한 동일한 기능을 달성하기 위해 오버라이드 (override) 할 수 기본값으로 생성자에 추가 형식 매개 변수를 추가 할 수 MyDie

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

에 클래스 메서드를 만듭니다.

관련 문제