Dans le tutoriel python ajouté que python ne peut pas cacher ses attributs d'autres classes. quelque chose comme des données privées en C++ ou java..Mais aussi je sais que nous pouvons utiliser _ ou __ pour définir certaines variables comme un privé mais ce n'est pas enogh. Je pense que c'est un faible si ce n'est pas quelque chose à faire.informations se cachant dans python
Répondre
Cela fait partie de la philosophie de Python. En gros, il vous fait confiance pour être prudent et faire preuve de prudence avec tout ce qui commence par un trait de soulignement. Si vous voulez vraiment cacher l'état afin que personne ne peut le toucher, vous pouvez le faire:
def fort_knox():
# A very private variable
gold = [0]
class impl(object):
def add_gold(self, amt):
gold[0] += amt
def remove_gold(self, amt):
raise Exception('No withdrawals!')
def count_gold(self):
return gold[0]
return impl()
'lol. fort_knox(). add_gold.im_func.func_closure [0] .cell_contents -> [0] ' –
@Longpoke: Mignon. Je suppose que "fort_knox" n'est pas aussi impénétrable que nous avons été amenés à le croire. –
N'élève jamais 'Exception' directement, car il ne peut pas être pris en compte. Au lieu de cela, soulevez une exception plus spécifique. –
L'encapsulation de données en Python est appliquée par convention et révision par les pairs. Étonnamment, avoir tous les attributs effectivement public n'a pas causé de problème pour la majorité des programmeurs Python.
En utilisant un trait de soulignement au début du nom d'un élément ou un signal de méthode au lecteur que ce qu'ils sont en regardant est "détails de mise en œuvre interne". S'ils veulent utiliser cela, ils le peuvent, mais il est très probable qu'une nouvelle version de la classe ne conserve pas l'API pour la méthode ou les éléments internes seulement (eh, "slots", je suppose, les variables d'instance). En ayant des garanties imposées par le compilateur sur ce qui est visible et non visible, vous êtes plus sûr que les parties externes ne regardent pas les bits internes, mais même en C++, il n'est pas si difficile d'accéder aux choses privées. En pratique, aussi longtemps que vous faites confiance aux gens de ne pas faire des choses stupides, il n'y a aucun problème à avoir "ceci est interne, ne touchez pas" comme un rappel poli plutôt qu'impliqué.
De plus, en C++, le mécanisme de dissimulation ne fournit pas d'encapsulation contre les changements d'implémentation, d'où l'idiome de pimpl –
Vous avez raison que la convention _foo
n'est pas suffisante pour rendre les données privées; ce n'est pas censé être! La dissimulation d'informations ne fait pas partie de la conception de Python. Lorsque vous écrivez des programmes en Python, vous dépendez des bonnes manières de l'appelant de laisser vos éléments internes en fonction de la convention de nommage et de votre documentation. N'essayez pas d'exercer plus de contrôle que cela; nous sommes tous des adultes consentants.
Il existe une convention de dénomination des méthodes d'utilisation interne telles que _foo
avec un seul trait de soulignement principal; cela sert plus de fins de documentation que toute autre chose. Python nom-mangles __foo
attributs. Certaines personnes pensent que cela les rend plus privées, mais cela ne les rend pas du tout privées, bien que cela rende vos classes plus difficiles à utiliser, à étendre et à tester. Je ne les utilise jamais.
- 1. image se cachant dans mon projet xcode
- 2. Orientation de l'iPhone HTML se cachant
- 3. En utilisant et en se cachant la classe
- 4. PyGTK Fenêtre ne se cachant pas quand on lui dit
- 5. Cocoa validateUserInterfaceItem et l'élément de menu se cachant
- 6. changeantes et les parties se cachant d'une table
- 7. étiquette se cachant sur cliquant dessus à l'aide jquery
- 8. Classe abstraite - mise en œuvre se cachant dans la pratique de C
- 9. Se souvenir des informations Formulaire
- 10. Informations sur l'ordinateur en python
- 11. wxPython sur KDE 4.2: fenêtre popping sur le dessus de l'écran et se cachant
- 12. Fils de Suckerfish Menu IE6 - menu se cachant derrière le contenu
- 13. C# Formulaire Problème: nouvelle forme perdant le contrôle et se cachant aléatoirement
- 14. Magento cachant toutes les erreurs page
- 15. Comment ouvrir une forme de la forme principale en se cachant la principale forme
- 16. Java se cachant: un moyen pour les classes client d'appeler `super`?
- 17. Win32: mode plein écran et la barre des tâches se cachant
- 18. ctypes se comportent étrangement dans l'interpréteur Python
- 19. Lire des informations XML DOCTYPE avec Python
- 20. Masquer les informations dans un fichier PDF en Python
- 21. Écrire les informations de copyright dans le code python
- 22. Comment obtenir les informations système avec Python?
- 23. Python récupération des informations de service Windows
- 24. python se connectant à django
- 25. informations semblant sortir de mysqldb incorrectement, python django
- 26. Python + Facebook, obtenir des informations sur un groupe facilement
- 27. Python subprocess.Popen se bloque dans 'pour l dans p.stdout' jusqu'à ce que p se termine, pourquoi?
- 28. montrant et cachant quelque chose sur la bascule de glissement dans jquery
- 29. créer "multipanel" se connecter et se souvenir des informations de connexion - android
- 30. utiliser python/django pour permettre aux utilisateurs de se connecter à mon site à l'aide de leurs informations d'identification google
Qu'est-ce que "Je pense que c'est une semaine si ce n'est pas une chose à faire". signifier? –
Et la question est? – doublep
Marcelo: Je pense que c'est peut-être "Je pense qu'il est faible s'il n'y a aucun moyen de cacher l'information". – Vatine