Qu'est-ce qu'une classe ?
peut être considérée comme un synonyme de catégorie ou de type. Tous les objets appartiennent à une certaine classe et sont appelés instances de cette classe.
Par exemple : Bird est une instance de "bird". Ceci est juste une classe générale (abstraite) avec de nombreuses sous-classes : l'oiseau que vous voyez pourrait appartenir à la sous-classe « alouette ». Considérez les « oiseaux » comme l’ensemble de tous les oiseaux, dont les « alouettes » sont un sous-ensemble. Lorsque la classe à laquelle appartient un objet est un sous-ensemble de la classe à laquelle appartient un autre objet, la première est appelée une sous-classe du second, donc les « alouettes » sont des sous-classes d'« oiseaux » et les « oiseaux » sont des « alouettes ». Superclasse "Bird"
Définir une sous-classe n'est qu'un processus de définition de plus de méthodes
Créer une classe
>>> class Person: def setName(self,name): self.name=name def getName(self): return self.name def greet(self): print "Hello,world! I'm %s" % self.name >>> foo=Person() >>> bar=Person() >>> foo.setName('Nsds') >>> bar.setName('Ysdy') >>> foo.greet() Hello,world! I'm Nsds >>> bar.greet() Hello,world! I'm Ysdy
Lors de l'appel des fonctions setName et greet de foo, foo se transmet automatiquement dans la fonction comme premier paramètre, il est donc nommé self. Sans self, les méthodes membres ne peuvent pas accéder à l'objet lui-même sur lequel elles souhaitent exploiter ses propriétés.
Les propriétés sont accessibles en externe :
>>> foo.name 'Nsds' >>> bar.name='Yoda' >>> bar.greet() Hello,world! I'm Yoda
>>> class Class: def method(self): print 'I have a self!' >>> def function(): print "I don't..." >>> s=Class() >>> s.method() I have a self! >>> s.method=function >>> s.method() I don't...
>>> class Bird: song='Squaawk' def sing(self): print self.song >>> bird=Bird() >>> bird.sing() Squaawk >>> birdsong=bird.sing >>> birdsong() Squaawk
>>> class Secretive: def __inaccessible(self): print "Bet you can't see me..." def accessible(self): print "The secret message is:" self.__inaccessible() >>> s=Secretive() >>> s.__inacessible() Traceback (most recent call last): File "<pyshell#182>", line 1, in <module> s.__inacessible() AttributeError: 'Secretive' object has no attribute '__inacessible' >>> s.accessible() The secret message is: Bet you can't see me...
>>> Secretive._Secretive__inaccessible<unbound method Secretive.__inaccessible> >>> s._Secretive__inaccessible() Bet you can't see me...
>>> class MemberCounter: members=0 def init(self): MemberCounter.members+=1 >>> m1=MemberCounter() >>> m1.init() >>> m1.members >>> m1.members=2 >>> m1.members >>> m2=MemberCounter() >>> m2.init() >>> m2.members >>> m2.init() >>> m2.members >>> m1.members >>>
>>> class Filter: def init(self): self.blocked=[] def filter(self,sequence): return [x for x in sequence if x not in self.blocked] >>> class SPAMFilter(Filter): def init(self): self.blocked=['SPAM'] >>> f=Filter() >>> f.init() >>> f.filter([1,2,3]) [1, 2, 3] >>> s=SPAMFilter() >>> s.init() >>> s.filter(['SPAM','SPAM','egg','name','ff']) ['egg', 'name', 'ff']
>>> class Filter: def init(self): self.blockes=[] def filter(self,sequence): return [x for x in sequence if x not in self.blocked] >>> class S(Filter): def init(self): self.blocked=['s'] >>> f=Filter() >>> f.init() >>> f.filter([1,2,3])
>>> class C(): def calculate(self,expression): self.value=eval(expression) >>> class Talker(): def talk(self): print 'Hi,my value is',self.value >>> class TalkingCalculator(C,Talker): pass >>> tc=TalkingCalculator() >>> tc.calculate('1+2*3') >>> tc.talk() Hi,my value is 7