2017-09-23 10 views
1

Ich habe C-Bibliothek, die Typen wie SkiUser und SkiContact, und hat viele Funktionen wie SkiUserLogin() und SkiUserLogout() aussetzt, die einen Zeiger auf relevante Art als erstes Argument akzeptieren.Richtlinien für die Aufbewahrung/Stripping-Klasse Präfixe Namen, wenn zu C-Bibliotheken Schnittstelle

Ich möchte Python/Cython Schnittstelle für diese Bibliothek erstellen, und es scheint nur natürlich, dass SkiUserLogin()login() Methode der SkiUser Objekt werden sollte.

Die Frage ist - in meinem Python-Klassen gegeben, dass jeder Typname mit Ski beginnt, sollte ich dieses Präfix halten, so habe ich diese:

from ski import SkiUser 
user = SkiUser(...) 
user.login() 

Oder sollte ich es abzustreifen und es nur in der halten Name des Pakets?

import ski 
user = ski.User(...) 
user.login() 

Gibt es Empfehlungen, welche Vorgehensweise zu verwenden ist und warum?

Antwort

0

Ich würde Ski von Typnamen entfernen. Wenn jeder Typ und jede Funktion dasselbe Präfix haben, ist es wahrscheinlich als Namespace gedacht.

Auch sollten Sie import ski und nicht andere Varianten verwenden. Es gibt eine gute Erklärung in The Hitch Hiker's Guide to Python, warum Sie das tun sollen:

Es ist möglich, die mehr Standardverhalten durch die Verwendung einer spezielle Syntax der Import-Anweisung zu simulieren: from modu import *. Dies ist allgemein als schlechte Praxis angesehen. Mit import * macht Code schwieriger lesen und macht Abhängigkeiten weniger kompartimentiert.

Mithilfe von from modu import func können Sie die gewünschte Funktion genau lokalisieren und in den globalen Namespace einfügen. Während viel weniger schädlich als import *, weil es explizit zeigt, was in den globalen Namespace importiert wird, ist der einzige Vorteil gegenüber einem einfacheren import modu , dass es ein wenig Tipparbeit sparen wird.

Sehr schlecht

[...] 
from modu import * 
[...] 
x = sqrt(4) # Is sqrt part of modu? A builtin? Defined above? 

Bessere

from modu import sqrt 
[...] 
x = sqrt(4) # sqrt may be part of modu, if not redefined in between 

Beste

import modu 
[...] 
x = modu.sqrt(4) # sqrt is visibly part of modu's 
+0

Während ich mit kurzen und prägnanten 'modu.sqrt' einigen können, wie wäre es nicht so schön, aber echte' selenium.webdriver.common.keys.Keys'? – toriningen

+0

Für einen solchen Fall würde ich empfehlen, einen Alias ​​zu verwenden, wie 'selen.webdriver.common.keys als skeys importieren ', dann können Sie' skeys.Keys' schreiben. – r0the

Verwandte Themen