habe hier einen decorator mit dem man dynamisches Typechecking für python 2.x machen kann.
Er prüft beim Funktions oder Methodenaufruf ob die tatsächlich beim aufruf übergebenen Parameter den spezifizierten Typen entsprechen und raised einen TypeError wenn nicht.
Als Parametertypen kann man jeden Python Typ (also insbesondere auch eigene Klassen) verwenden.
Auf der Github Seite sind noch ein paar Beispiele. ( oder auch hier: )
Projectname: IcanHasTypeCheck.
Projekt auf Github: https://github.com/pythononwheels/icanhastypecheck
Die Parameter Spezifikation wird über (sphinx style) docstrings gemacht. Ich bin dabei noch eine Alternative über eine Namenskonvention (Parameterprefix) zu erstellen.
Benutzung:Also mehr als das hinzufügen des Decorators und die Parameter spec (siehe Beispiel unten) ist es eigentlich nicht.
Kurzer Extrakt aus dem README zu Benutzung:
IcanHasTypeCheck (ICHTC)
is a small and easy to use decorator to enable dynamic type checking for python
method and function calls. Working ans tested for python 2.7 but should run in other 2.x as well.
Create an [issue](https://github.com/pythononwheels/icanh ... eck/issues) on github if you encounter any problems using it.
(Plans and an example implementation for python 3.x is included )
Function type specification is based on a naming/docstring convention for python < 3.x
Typechecking is implemented as a decorator that can be attached to any function or method and will
perform the according (dynamic) typechecking.
It will raise a TypeError if the arguments don't match the function specification.
Python 2.x
Since function annotations are not available in python 2.x the way I chose to implement typechecking for
python 2.x is a documentation convention for parameters based on [the info field lists of sphinx](http://sphinx-doc.org/markup/desc.html#info-field-lists). So even when you don't use typechecking you can use it to auto-generate a function documentation.
There is an alternative approach for those of you who don't like docstings in sphinx format which úses a naming convention. (See Alternatives below)
Syntax for python 2.x / docstrings:
Code: Alles auswählen
from typecheck import typesafe
@typesafe
def foo(param_a, param_b):
"""
:type param_a: types.StringType
:type param_b: types.IntType
:rtype: types.BooleanType
"""
# Do Something
return True
Warum: Eigentlich bin ich über die Function Annotations von Python 3 gestolpert und damit beim Thema typechecking gelandet.
Ich benötige typechecking, da ich für PythonOnWheels gerade ein MongoDB backend hinzufüge und MongoDB selbst keinerlei typechecks macht sondern munter alles frisst was man ihr vorsetzt.
Das ist supergenial für schnelles arbeiten (keinerlei Schemadefinitionen) ist aber auf dauer etwas sehr unberechenbar

Deshalb möchte ich typechecking zumindest im Werkzeugkasten haben. Die Benutzung bleibt ja jedem selbst überlassen.
Andere Arten der Benutzung als duch sphinx docstrings kann man rel. leicht über Anpassung der regex hinbekommen. (gerne bei github ergänzen).