2014-04-20 6 views
0

classe principale:python des questions de mise en œuvre de la classe

class circle: 

    def __init__(self,radius=1): 

     self.radius=radius 

    def getArea(self): 
     return(3.142*self.radius*self.radius) 
    def getPerimeter(self): 
     return(2*3.142*self.myradius) 
    def setradius(self,radius): 
     if radius>0: 
      self.__radius=radius 
    def getRadius(self): 
     return self.__radius 

En utilisant la classe:

from Circle import circle 

def main(): 


    c1=circle() 
    c1.radius=-1 
    c2=circle(5) 
    c3=circle(3) 
    print(c1.getArea()) 
    print(c2.getArea()) 
    print(c3.getArea()) 

main() 

Bonjour les gens! J'essayais juste d'apprendre les bases de la classe, mais j'éprouvais quelques problèmes. J'espère que vous pouvez aider. Merci d'avance :)

  1. Qu'est-ce qu'une variable privée? J'ai lu à ce sujet et les gens disent qu'il n'est pas accessible en dehors des cours. D'ACCORD! MAIS QUE SIGNIFIE-T-IL EXACTEMENT?
  2. Les données privées sont-elles identiques à DATA HIDING?
  3. Qu'est-ce que c'est exactement soi-même? J'ai lu à ce sujet aussi, mais je ne pouvais pas comprendre à partir des réponses python précédentes. De ce que je pense self est écrit après chaque def déclaration en classe.

Merci encore! À votre santé!

+1

Votre indentation dans la classe 'circle' n'est actuellement pas valide/ambiguë - pourriez-vous éditer votre message pour le corriger? – Michael0x2a

+0

@ Michael0x2a Salut, c'est mieux maintenant? – Newbie

+0

Non, le problème est que 'def __init __()' doit être au même niveau d'indentation que les autres lignes 'def'. – Leigh

Répondre

2

Variables privées/données Hiding/Nom cylindrage

Python ne dispose pas des variables d'instance privées accessibles uniquement à partir d'un objet. Vous ne pouvez pas appliquer les données qui se cachent dans Python. Par convention, le code Python utilise un trait de soulignement unique pour indiquer un nom qui n'est pas considéré public, mais le nom est toujours accessible en dehors de son objet. Vous, cependant, utilisez le nom mangling (avec deux caractères de soulignement principaux). Le remplacement de nom remplace un identificateur de la manière suivante:

self.__radius devient self._classname__radius si classname est le nom de la classe.

Même les noms mutilés sont accessibles en dehors de leur classe. Le nom mutilé réduit simplement la probabilité de collisions de noms, puisque le nom de la classe devient une partie du nom de l'attribut.

auto

self est par convention le nom que nous utilisons pour une instance. Considérons donc cette classe:

class Circle(object): 
    def get_area(self): 
     pass 

La classe est Circle, et nous pourrions attribuer une instance de Circle à une variable comme ceci:

c = Circle() # an instance 

Maintenant, si nous appelons la méthode get_area, nous pourrions le faire comme ceci:

c.get_area() # note the lack of arguments 

cela équivaut à ce qui suit:

Circle.get_area(c) # instance c is now passed in as the first argument of `get_area`, which our method calls self 

self, puis, est une instance transmise à une méthode en tant que premier argument.

Questions connexes