J'ai une classe qui attend un flux contenant un fichier XML.
Je ne veux pas nécessairement un flux de fichier et je pourrais utiliser d'autres sources comme une base de données, une socket, etc.
De quelle classe ai-je besoin pour sous-classer le io module afin de fournir l'interface de flux d'autres sources?Création d'une classe de flux en Python
Répondre
Le typage dynamique vous permet de ne sous-classer aucune classe de base dans ce cas. Vous devez implémenter certaines méthodes avec des noms propres. Blog post on the subject
Ce que je ne comprends pas est pourquoi je ne devrais pas sous classe. En tout cas, mon interface devrait être l'interface du flux. –
J'ai écrit seulement que vous êtes capable de ne pas sous-classer en utilisant le mécanisme d'héritage et pouvez créer votre classe et implémenter des méthodes avec la signature nécessaire est nécessaire et suffisante – Andrey
La réponse donnée par Andrey n'est pas entièrement correcte.
En Python, les flux sont des objets de type "fichier". Vous pouvez les lire/écrire en utilisant les outils définis dans le module io. Le module fournit également des interfaces que vous devez implémenter si vous voulez définir un objet stream.
Notez que le module io
différencie trois types de flux différents, qui nécessitent des interfaces légèrement différentes. (Ils diffèrent principalement en termes de types de données.)
- texte E/S - Interface TextIOBase
- E/S binaire - Interface BufferedIOBase
- I/O Raw - Interface RawIOBase
StringIO par exemple est une implémentation en mémoire de la TextIOBase. Notez que ces interfaces sont disponibles sur Python 2 et 3.
- 1. Création conditionnelle de classe (Python)
- 2. Création d'une classe LazilyEvaluatedConstantProperty en Python
- 3. Création de threads en python
- 4. Création d'objets à l'intérieur d'une classe en python
- 5. Création d'une instance d'une classe avec une variable en Python
- 6. Copie d'un flux en Python
- 7. Calcul de flux de données en python
- 8. Création de vocabulaire en python
- 9. Création de liste en python
- 10. création de matrice en python
- 11. Création de dictionnaires en Python
- 12. Création d'acronymes en Python
- 13. Traitement de flux asynchrone en Python
- 14. flux de fichier Convertir en python base64
- 15. flux de contrôle du programme en Python
- 16. Lecture de flux MMS en Python
- 17. problèmes de création d'instances d'objet en python
- 18. python création d'une classe à l'exécution contenant une autre classe
- 19. Vues de flux Python
- 20. Création de plusieurs flux audio d'un serveur icecast2 en utilisant python-shout
- 21. type de classe en python
- 22. Création dynamique de classes - Python
- 23. Comment éviter la création d'objets en python?
- 24. Création de graphes de dépendances en Python
- 25. Fusion de flux paresseux (en utilisant des générateurs) en Python
- 26. Création dictionnaire dynamique en Python
- 27. Création d'un jeu en python
- 28. classe unicode en Python
- 29. Classe Wrapper en Python
- 30. Création d'une instance d'une classe python, déclarée en python, avec l'API C
Une socket a déjà la même interface qu'un autre Une connexion à une base de données fournit généralement un "blob" qui peut être transformé en objet de ligne de fichier en utilisant 'StringIO'. Pourquoi sous-classez-vous quelque chose quand votre interface "stream" (c'est-à-dire, 'file' de Python) existe déjà? Qu'est-ce qui est unique ou différent? –
Pourquoi dériver? Python n'est pas C++. Etes-vous sûr que passer juste quelque chose qui a une bonne méthode 'read()' n'est pas suffisant? – 6502
@ 6502: Le fichier XML peut être chargé à partir d'une base de données dans un flux. Je suis juste en train d'encapsuler un comportement. –