2010-07-22 3 views
4

Disons que j'ai ce code:Appel de la méthode d'une classe dans une autre classe en python

class class1(object): 
    def __init__(self): 
     #don't worry about this 


    def parse(self, array): 
     # do something with array 

class class2(object): 
    def __init__(self): 
     #don't worry about this 


    def parse(self, array): 
     # do something else with array 

Je veux être en mesure d'appeler parse de classe 1 de class2 et vice-versa. Je sais avec C++ cela peut se faire assez facilement en faisant

class1::parse(array) 

Comment puis-je faire l'équivalent en python?

+4

C'est ce qu'ils appellent une "odeur de code". Cela ressemble à un mauvais design. Quelle est la raison de vouloir faire cela? –

Répondre

4

On dirait que vous voulez un static method:

class class1(object): 
    @staticmethod 
    def parse(array): 
     ... 

Notez que dans ce cas, vous omettez le plus souvent, le paramètre requis self, car parse n'est pas une fonction appelée sur une instance particulière de class1.

D'autre part, si vous voulez une méthode qui est toujours liée à sa classe propriétaire, vous pouvez écrire un class method, où le premier argument est en fait l'objet de classe:

class class1(object): 
    @classmethod 
    def parse(cls, array): 
     ... 
+0

Oui, merci, cela semble fonctionner. – Swiss

+4

Notez que si vous ressentez le besoin de méthodes statiques comme ça, c'est une indication forte que 'class1' et' class2' devraient être des modules au lieu de classes (ou au moins que 'parse' staticmethods devrait être des fonctions à la place.) –

+1

' @staticmethod 'devrait être évité (et' @ classmethod' aussi si vous n'avez pas besoin de la classe) pour en faire une fonction au niveau du module. –

Questions connexes