l'appel d'une fonction de classe en python - différentes façon
EDIT2: Merci à tous pour votre aide!
EDIT: sur l'ajout de @staticmethod, il fonctionne. Cependant, je me demande encore pourquoi j'obtiens une erreur de type ici.
Je viens de commencer OUPS et je suis complètement nouveau pour elle. J'ai une question très simple concernant les différents moyens que je peux appeler une fonction d'une classe.
J'ai un testClass.py fichier avec le code:
class MathsOperations:
def __init__ (self, x, y):
self.a = x
self.b = y
def testAddition (self):
return (self.a + self.b)
def testMultiplication (self):
return (self.a * self.b)
Je suis à l'appel de cette classe à partir d'un autre fichier appelé main.py avec le code suivant:
from testClass import MathsOperations
xyz = MathsOperations(2, 3)
print xyz.testAddition()
Cela fonctionne sans aucun problème. Cependant, je voulais utiliser la classe de façon beaucoup plus simple.
Je viens de mettre le code suivant dans la testClass.py fichier. J'ai abandonné la fonction init cette fois.
class MathsOperations:
def testAddition (x, y):
return x + y
def testMultiplication (a, b):
return a * b
l'appel de cette aide;
from testClass import MathsOperations
xyz = MathsOperations()
print xyz.testAddition(2, 3)
cela ne fonctionne pas. Quelqu'un peut m'expliquer ce qui se passe, à tort, dans le cas 2? Comment puis-je utiliser cette classe?
L'erreur que j'obtiens est "TypeError: testAddition() prend exactement 2 arguments (3)"
OriginalL'auteur Rishav Sharan | 2011-11-01
Vous devez vous connecter pour publier un commentaire.
vous devez utiliser l'auto comme la première paramètres d'une méthode
dans le deuxième cas, vous devez utiliser
et dans votre code, vous pouvez effectuer les opérations suivantes
si vous utilisez la classe sans l'instanciation d'une variable de première
il vous donne une erreur "TypeError: unbound méthode"
si vous voulez le faire vous aurez besoin du
@staticmethod
décorateurPar exemple:
ensuite dans votre code, vous pouvez utiliser
si vous utilisez le @staticmethod vous pouvez utiliser la classe sans déclarer une variable de première par exemple, dans ce cas, si vous essayez d'utiliser MathOperation.testAddtion(2,3), il vous donne une erreur "TypeError: indépendant de la méthode"
Non, le staticmethod décorateur élimine la nécessité pour les auto paramètre.
OriginalL'auteur Rafael Rotelok
avertissement: ce n'est pas juste du point de réponse, il est plus comme un morceau de conseils, même si la réponse peut être trouvée sur les références
À mon humble avis: la programmation orientée objet en Python suce beaucoup.
La méthode d'expédition n'est pas très simple, vous avez besoin de savoir sur lié/indépendant de l'instance de classe (et statique!) méthodes, vous pouvez avoir l'héritage multiple et la nécessité de traiter avec les anciens et les nouvelles classes de style, le vôtre était vieux style) et de savoir comment la MRO des œuvres, des propriétés...
En bref: trop complexe, avec beaucoup de choses qui se passe sous le capot. Permettez-moi de même le dire, c'est unpythonic, car il ya beaucoup de façons différentes pour obtenir les mêmes choses.
Mon conseil: utiliser de la POO que lorsque cela est vraiment utile. Habituellement, cela signifie que l'écriture de classes qui implémentent bien connu des protocoles et de les intégrer de façon transparente avec le reste du système. Ne créez pas beaucoup de classes juste pour le plaisir de l'écriture de code orienté objet.
Prendre une bonne lecture de ces pages:
vous les trouverez très utile.
Si vous voulez vraiment apprendre la POO, je te suggère de commencer avec un langage conventionnel, comme Java. Ce n'est pas la moitié autant de plaisir que le Python, mais c'est de plus en plus prévisible.
vous êtes les bienvenus! en passant, la réponse est que vous obtenez l'erreur, car l'interprète ajoute un
self
paramètre pour les méthodes liées, de sorte que vous vous retrouvez avec trois (self
plus vos deux fourni des entiers).ah! cette explication fait sens. Je suis généralement fatigué de l'original python docs car ils ne sont pas newbie friendly, préférant utiliser des sites comme "un octet de python".
OriginalL'auteur fortran
Vos méthodes ne renvoient pas à un objet (qui est, de soi), de sorte que vous devrait
utiliser le @staticmethod décorateur:
OriginalL'auteur Owen
Vous avez besoin d'une instance d'une classe à utiliser ses méthodes. Ou si vous n'avez pas besoin d'accéder à des classes de variables statiques paramètres), puis vous pouvez définir la méthode est statique et il peut être utilisé même si la classe n'est pas instancié. Juste ajouter
@staticmethod
décorateur à vos méthodes.docs: http://docs.python.org/library/functions.html#staticmethod
Pas de problème, d'autres réponses déjà mentionner le manque
self
argument. Mais je voudrais encore utiliser des méthodes statiques si vous n'avez pas besoin de travailler avec les paramètres de la classe.OriginalL'auteur rplnt
puis
OriginalL'auteur Ali Hajiloo