Gibt es eine Konvention, wie man sowohl eine Methode als auch eine Funktion hat, die dasselbe tun (oder überhaupt tun)?Haben Sie eine Methode und eine Funktion, die dasselbe tun?
Betrachten wir zum Beispiel
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)])
wo count_values
ist sowohl ein Verfahren und eine Funktion.
Ich denke, es ist schön, die Methode zu haben, weil das Ergebnis "gehört" zu dem MyDie-Objekt. Außerdem kann das Verfahren Attribute aus dem Objekt MyDie
ziehen, ohne sie an count_values
weiterleiten zu müssen. Auf der anderen Seite ist es schön, die Funktion, um auf andere Funktionen als MyDie
, wie
count_values(lambda: choice([3,5]) + choice([7,9]), 7)
ist es am besten zu funktionieren haben diese, wie oben zu tun (wo der Code wiederholt wird, übernehmen die Funktion eine längere Stück Code, nicht nur eine Zeile) oder die count_values
Methode mit
def count_values(self):
return count_values(self, number_of_rolls)
oder dem Verfahren erhält ersetzen alle zusammen los und nur eine Funktion haben? Oder vielleicht noch etwas?