Czy Pythonic sprawdza typy argumentów funkcji?

Wiem, że argumenty funkcji sprawdzania typu są generalnie mile widziane w Pythonie, ale myślę, że wymyśliłem sytuację, w której ma to sens.

W moim projekcie posiadam abstrakcyjną klasę bazowąCoord, z podklasąVector, który ma więcej funkcji, takich jak obrót, zmiana wielkości itp. Listy i krotki liczb również zwrócą wartość Prawda dlaisinstance(x, Coord). Mam także wiele funkcji i metod, które akceptują te typy Coorda jako argumenty. Skonfigurowałem dekoratorów, aby sprawdzić argumenty tych metod. Oto uproszczona wersja:

class accepts(object):
    def __init__(self, *types):
        self.types = types

    def __call__(self, func):
        def wrapper(*args):
            for i in len(args):
                if not isinstance(args[i], self.types[i]):
                    raise TypeError

            return func(*args)

        return wrapper

Ta wersja jest bardzo prosta, nadal zawiera pewne błędy. To tylko po to, aby zilustrować ten punkt. I będzie to używane jak:

@accepts(numbers.Number, numbers.Number)
def add(x, y):
    return x + y

Uwaga: Sprawdzam tylko typy argumentów w odniesieniu do abstrakcyjnych klas bazowych.

Czy to dobry pomysł? Czy jest lepszy sposób, aby to zrobić bez powtarzania podobnego kodu w każdej metodzie?

Edytować:

Co zrobić, gdybym zrobił to samo, ale zamiast sprawdzać typy wcześniej w dekoratorze, łapię wyjątki w dekoratorze:

class accepts(object):
    def __init__(self, *types):
        self.types = types

    def __call__(self, func):
        def wrapper(*args):

            try:
                return func(*args)
            except TypeError:
                raise TypeError, message
            except AttributeError:
                raise AttributeError, message

        return wrapper

Czy to lepiej?

questionAnswers(6)

yourAnswerToTheQuestion