I. Introduction Paquet
La programmation orientée objet a trois caractéristiques: encapsulation, héritage, polymorphisme, la caractéristique la plus importante est le package. Package fait référence aux données et fonctions sont intégrées ensemble, ne semble pas très familier, oui, nous l'avons dit « intégré », le mot est en fait un paquet d'argument populaire. En outre, pour le package à un attributs d'objet ou de classe, nous pouvons contrôler strictement l'accès, réalisé en deux étapes: les interfaces cachées et ouvertes
- L'encapsulation est une caractéristique des caractéristiques orientées objet du noyau trois
- Paquet <---> Intégration
En second lieu, l'attribut caché
2.1 Comment cacher
Avant que le nom de la propriété avec le préfixe __ mettra en œuvre un attribut caché l'effet de l'étranger
Le problème caché a besoin d'attention:
I: ne peux pas accéder à la ligne de propriété au début de la double baisse directement en dehors de la classe, mais connaissant le nom de la classe et le nom de la propriété peut épeler le nom:
_ __ nom de la classe d'attribut, vous pouvez visiter, comme Foo._A__N, de sorte que cette opération ne limite pas l' accès externe sur le terrain au sens strict, juste une déformation du sens grammatical.
classe Foo: __x = 1 # _Foo__x def __f1 (auto): # _Foo__f1 print ( ' de l' essai ' ) # print (Foo de dict__) # impression (Foo._Foo__x) # impression (Foo._Foo__f1)
II: Ce caché dans le mauvais externe, parce que les propriétés commenceront par __ déformation uniforme se produit lorsque le type de corps syntaxe du code de vérification:
classe Foo: __x = 1 # _Foo__x = 1 def __f1 (self): # _Foo__f1 print ( ' de l' essai ' ) def f2 (auto): impression (. auto __x ) # impression (self._Foo__x) impression (. auto __f1 ) # impression (self._Foo__f1) impression (Foo. __x ) impression (Foo. __f1 ) obj = Foo () obj.f2 ()
III: Cette opération de déformation se produit uniquement lorsque la grammaire vérification d'un membre de la classe, __ après le début des définitions d'attributs ne sont pas déformés
classe Foo: __x = 1 # _Foo__x = 1 def __f1 (self): # _Foo__f1 print ( ' de l' essai ' ) def f2 (auto): impression (. auto __x ) # impression (self._Foo__x) impression (. auto __f1 ) # print (self._Foo__f1) Foo. __y = 3 impression (Foo. __dict__ ) impression (Foo. __y ) classe Foo: __x = 1 #_Foo__x = 1 def __init__ (self, nom, âge): auto. __name = nom auto. __age = âge obj = Foo ( ' egon ' , 18 ) impression (obj. __dict__ ) impression (obj.name, obj.age)
2.2 Pourquoi voulez-vous cacher
I, attribut de données caché « caché classe de données limites fonctionnement externe directement sur les données, l'interface devrait fournir la classe autorisée des données de fonctionnement externes indirects, l'interface peut être fixé sur la logique supplémentaire aux données exploitation strictement contrôlée:
# Designer: Egon classe populaire: DEF de (auto, nom): Soi. __NAME__ = nom DEF get_name (Self): # peut accéder indirectement au nom de la propriété via l'interface # Imprimer ( 'petite poubelle, ne pas voir' ) Imprimer (auto. __name__ ) DEF set_name (auto, Val): IF du type (Val) EST pas str: Imprimer ( ' petite poubelle, doit passer un type de chaîne ' ) retour auto. __name__ = Val # utilisateurs: Wang Peng Les gens = obj ( ' Egon ' ) # Imprimer (obj.name) # ne peut pas directement le nom de l' attribut # obj.set_name ( 'EGON') obj.set_name (123123123 ) obj.get_name ()
II, cachant des attributs de fonction / méthode: le but est d'isoler la complexité