Czy możesz połączyć metody łatkowe na typach rdzeniowych w Pythonie?
Ruby może dodawać metody do klasy Number i innych typów podstawowych, aby uzyskać takie efekty:
1.should_equal(1)
Ale wydaje się, że Python nie może tego zrobić. Czy to prawda? A jeśli tak, to dlaczego? Czy ma to coś wspólnego z tym, żerodzaj nie można zmodyfikować?
Aktualizacja: Zamiast mówić o różnych definicjach łatania małp, chciałbym po prostu skupić się na powyższym przykładzie. Doszedłem już do wniosku, że nie da się tego zrobić, jak kilku z was odpowiedziało. Ale chciałbym bardziej szczegółowe wyjaśnienie, dlaczego nie można tego zrobić, a może to, co pozwoli na to, jeśli jest dostępna w Pythonie.
Aby odpowiedzieć na niektóre z was: Powód, dla którego jamoc chcesz to zrobić po prostu estetyką / czytelnością.
item.price.should_equal(19.99)
To brzmi bardziej jak angielski i wyraźnie wskazuje, która wartość jest testowana, a która jest wartością oczekiwaną, tak jak:
should_equal(item.price, 19.99)
Ta koncepcja jest coRspec i niektóre inne ramy Ruby są oparte na.