Comment puis-je prolonger un module python? L'ajout de nouvelles fonctionnalités à la " python-twitter paquet
Quelles sont les meilleures pratiques pour l'extension de l'existant module Python – dans ce cas, je souhaite prolonger la python-twitter
paquet en ajoutant de nouvelles méthodes à la base de la classe de l'API.
J'ai regardé tweepy
, et j'aime aussi bien; je viens de trouver python-twitter
plus facile à comprendre et à étendre les fonctionnalités que je veux.
J'ai l'méthodes déjà écrit – j'essaie de comprendre la plupart des Pythonic et la moins perturbatrice façon de les ajouter dans la python-twitter
package module, sans changer ce module de base.
Vous devez vous demander ce que c'est que vous essayez d'accomplir, qui ne peut pas être résolu par dérivation de la fonctionnalité du module existant.
Fil intéressant sur le Python groupe de nouvelles sur ce que j'ai à l'origine, était à la recherche de ce qui m'a conduit à cette Q&A, thread est de comme, 13 ans en arrière: mail.python.org/pipermail/python-dev/2002-June/024839.html
Fil intéressant sur le Python groupe de nouvelles sur ce que j'ai à l'origine, était à la recherche de ce qui m'a conduit à cette Q&A, thread est de comme, 13 ans en arrière: mail.python.org/pipermail/python-dev/2002-June/024839.html
OriginalL'auteur user319045 | 2010-04-24
Vous devez vous connecter pour publier un commentaire.
Un peu de moyens.
La voie de la facilité:
Ne pas prolonger le module, d'étendre les classes.
exttwitter.py
Inconvénient : Chaque classe de twitter doit être en exttwitter.py même si c'est juste un talon (comme ci-dessus)
Plus difficile (et éventuellement de l'onu-pythonic):
Importation * à partir de python-twitter dans un module, puis l'étendre.
Par exemple :
basemodule.py
extmodule.py
runscript.py
Je ne sais pas si le double de l'importation dans extmodule.py est pythonic - vous pourrait-il retirer, mais alors vous n'avez pas à traiter le cas d'utilisation de vouloir prolonger une fonction qui a été dans l'espace de noms de basemodule.
Aussi loin que l'étendue des classes, il suffit de créer une nouvelle API(basemodule.API) classe d'étendre l'API Twitter module.
Je ne considère pas que cela soit unpythonic. Il est utile de trucs comme ça qui peuvent faire à l'aide de python si puissant. Juste être évident sur ce que vous faites. Essayez de faire ça en Java ou en C++ 🙂
OriginalL'auteur Rizwan Kassim
Ne pas les ajouter au module. Sous-classe, les classes que vous souhaitez développer et à utiliser vos sous-classes dans votre propre module, en ne changeant pas les trucs d'origine.
À la sous-classe tu venais d'écrire votre propre module qui crée une nouvelle classe à l'aide de la syntaxe
class SomeName(othermodule.TheClassYouAreExtending):...
etSomeName
dépendra de retour sur la classe d'origine dans des conditions bien définies. Ceci est appelé héritage et comment vous le feriez normalement ajouter des méthodes à une classe. Ceci et d'autres sujets sont abordés, en tinyurl.com/thinkcspy2e, qui est un livre pour vous faire découvrir de Python et de la programmation orientée objet. Il est disponible gratuitement en ligne et en version imprimée et c'est mieux que certaines autres options que j'ai vu.Le tutoriel officiel docs.python.org/tut est également très bon, mais peut s'avérer plus difficile pour les personnes qui ne sont pas des programmeurs expérimentés avec de la bonne compréhension des paradigmes de programmation qu'ils utilisent.
L'héritage est sans doute excessive. Il y a une possibilité réelle que ce que vous voulez vraiment, c'est juste pour définir des fonctions qui prennent une instance de l'une de python-twitter de classes comme un argument ou à définir une nouvelle classe qui a une instance de l'une de python-twitter de classes comme un attribut. (Cette dernière technique est appelée composition quand vous en avez besoin pour la distinguer de la succession.) Je ne peux pas vous dire à coup sûr ce que vous voulez sans comprendre quel est le problème à résoudre exactement.
OriginalL'auteur Mike Graham
Voici comment vous pouvez manipuler directement le module de liste au moment de l'exécution – spoiler alert: vous obtenez le type de module de
types
module:... vous pouvez ensuite utiliser cette fonction comme suit:
... Vous pouvez également créer votre propre module de sous-classe, en précisant
types.ModuleType
comme l'ancêtre de votre nouvellement déclaréeclass
, bien sûr; je n'ai jamais personnellement trouvé ce nécessaire de le faire.(Aussi, vous n'avez pas ont pour obtenir le type de module à partir de la
types
module, vous pouvez toujours faire quelque chose commeModuleType = type(os)
après l'importationos
– j'ai souligné cette source unique du type parce qu'il n'est pas évidente; à la différence de beaucoup de ses autres builtin types de Python n'offre pas l'accès au type de module dans l'espace de noms global.)L'action réelle est dans la
sys.modules
dict, où (si vous avez la bonne intrepid) vous pouvez remplacer les modules existants ainsi que l'ajout de vos nouvelles.OriginalL'auteur fish2000
Dire que vous avez un ancien module appelé
mod
que vous pouvez utiliser comme ceci:Et vous voulez la prolonger, sans la remplacer pour vos utilisateurs. Facile à faire. Vous pouvez donner à votre nouveau module un nom différent,
newmod.py
ou le place du même nom au plus profond de chemin et de garder le même nom, par exemple/path/to/mod.py
. Ensuite, vos utilisateurs peuvent importer dans l'une de ces façons:ou
Dans votre module, vous aurez envie de faire tous les anciens noms disponibles:
ou explicitement le nom de chaque nom vous importez:
Je pense que le
import *
sera plus facile à gérer pour ce cas d'utilisation - si le module de base développe la fonctionnalité, vous serez parfaitement suivre (même si vous l'ombre de nouveaux objets avec le même nom).Si le
mod
vous étendez une bonne__all__
, il limitera les noms importés.Vous devez également déclarer un
__all__
et l'étendre avec l'étendue du module__all__
.Puis étendre la des objets et des fonctionnalités comme vous le feriez normalement.
Si les nouveaux objets fournir des fonctionnalités que vous souhaitez remplacer (ou peut-être vous êtes le portage de la nouvelle fonctionnalité dans une ancienne base de code), vous pouvez remplacer les noms
OriginalL'auteur Aaron Hall
Je suggère de ne pas réinventer la Roue? Je suis en train de construire une >6k ligne Client Twitter pour 2 mois maintenant, j'ai d'abord vérifié python-twitter aussi, mais c'est à la traîne beaucoup derrière les récents changements de l'API, de l', le Développement ne semble pas aussi actif, aussi il y a(au moins la dernière fois que j'ai vérifié) pas de support pour le protocole OAuth/xAuth).
Donc après une recherche un peu plus, j'ai découvert tweepy:
http://github.com/joshthecoder/tweepy
Pour: le développement Actif, OAauth/xAuth et jusqu'à ce jour avec l'API.
Les Chances sont élevées que ce que vous avez besoin est déjà là.
Donc je suggère d'aller avec qui, il est travaillé pour moi, la seule chose que j'ai dû ajouter a xAuth(qui a obtenu de fusion de retour à tweepy 🙂
Oh un un plug sans vergogne, si vous avez besoin d'analyser les Tweets et/ou leur format HTML utiliser ma version de python de la twitter-texte-* bibliothèques:
http://github.com/BonsaiDen/twitter-text-python
Cette chose est unittestetd une garantie pour analyser les Tweets comme Twitter.com n'.
OriginalL'auteur Ivo Wetzel