2016-02-05 14 views
20

In PEP 484, Typ Hinting wurde zu Python 3 mit der Aufnahme der typing-Modul hinzugefügt. Gibt es eine Möglichkeit, dies in Python 2 zu tun? Alles, was mir einfällt, ist ein Dekorator, der zu den Methoden hinzugefügt werden kann, um die Typen zu überprüfen, aber das würde zur Laufzeit scheitern und nicht früher erwischt werden, so wie es die Hinweise erlauben würden.Typ Hinting in Python 2

Antwort

28

Nach Suggested syntax for Python 2.7 and straddling code in PEP 484, die Typ Hinting definiert, gibt es eine alternative Syntax für die Kompatibilität mit Python 2.7. Es ist jedoch nicht zwingend notwendig, damit ich weiß nicht, wie gut unterstützt es ist, aber unter Angabe der PEP:

Einige Tools möchten Typenannotationen in Code unterstützen, die mit Python 2.7 kompatibel sein müssen. Zu diesem Zweck hat diese PEP eine vorgeschlagene (aber nicht obligatorische) Erweiterung, bei der Funktionsanmerkungen in einem # type: comment platziert werden. Solch ein Kommentar muss unmittelbar nach dem Funktionskopf (vor dem Docstring) platziert werden. Ein Beispiel: Die folgenden Python 3-Code:

def embezzle(self, account: str, funds: int = 1000000, *fake_receipts: str) -> None: 
    """Embezzle funds from account using fake receipts.""" 
    <code goes here> 

entspricht der folgenden:

def embezzle(self, account, funds=1000000, *fake_receipts): 
    # type: (str, int, *str) -> None 
    """Embezzle funds from account using fake receipts.""" 
    <code goes here> 

Für mypy Unterstützung finden Type checking Python 2 code.

+0

Hmm ok, sollte weiter die Dokumentation gelesen haben. Weißt du, ob es irgendwelche Tools gibt, die dies derzeit unterstützen? Nicht sicher, ob es sich nur um einen Standard handelt oder ob tatsächlich Werkzeuge implementiert wurden. – Andrew

+0

Gemäß PyCharm "PyCharm unterstützt type Hinting in Funktion Anmerkungen und Typ Kommentare mit dem Typisierungsmodul von PEP 484 definiert." Der Verweis auf TYPE COMMENTS macht deutlich, dass es unterstützt werden sollte. Ich verwende pyCharm nicht auf diesem Computer, deshalb kann ich es jetzt nicht überprüfen. EDIT: Link zu pycharm: https://www.jetbrains.com/pycharm/help/type-hinting-in-pypcharm.html#d316912e110 – Mijamo

+0

Danke, auch gefunden, dass Emacs Jedi damit auch arbeitet. – Andrew

8

An diesem Punkt die empfohlene und python3 gerecht ist zu tun, um die python2 bis 3 Anleitung folgen: http://python-future.org/func_annotations.html

def embezzle(self, account: str, funds: int = 1000000, *fake_receipts: str) -> None: 
    """Embezzle funds from account using fake receipts.""" 
    pass 

werden:

def embezzle(self, account, funds = 1000000, *fake_receipts): 
    """Embezzle funds from account using fake receipts.""" 
    pass 
embezzle.__annotations__ = {'account': str, 'funds': int, 'fake_receipts': str, 'return': None}