Python appel de méthode dans la classe
Je suis poinçonnage manière au-dessus de mon poids ici, mais s'il vous plaît garder avec ce Python amateur. Je suis un développeur PHP par le commerce et j'ai à peine touché cette langue avant de.
Ce que j'essaie de faire est d'appeler une méthode dans une classe semble assez simple...? Je suis complètement perplexe à propos de ce " moi " se réfère, et quelle est la procédure correcte pour appeler cette méthode à l'intérieur d'une classe et en dehors de la classe.
Quelqu'un pourrait-il expliquer pour moi, comment appeler la move
méthode avec la variable RIGHT
. J'ai essayé la recherche de ce sur plusieurs " apprendre le langage python les sites et les recherches sur StackOverflow, mais en vain. Toute aide sera appréciée.
La classe suivante œuvres de Scott script Python qui est accessible par un terminal GRAPHIQUE (urwid).
La fonction je travaille est un Scott Weston lanceur de missiles script Python, que je suis en train de crochet dans PHP serveur web.
class MissileDevice:
INITA = (85, 83, 66, 67, 0, 0, 4, 0)
INITB = (85, 83, 66, 67, 0, 64, 2, 0)
CMDFILL = ( 8, 8,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0)
STOP = ( 0, 0, 0, 0, 0, 0)
LEFT = ( 0, 1, 0, 0, 0, 0)
RIGHT = ( 0, 0, 1, 0, 0, 0)
UP = ( 0, 0, 0, 1, 0, 0)
DOWN = ( 0, 0, 0, 0, 1, 0)
LEFTUP = ( 0, 1, 0, 1, 0, 0)
RIGHTUP = ( 0, 0, 1, 1, 0, 0)
LEFTDOWN = ( 0, 1, 0, 0, 1, 0)
RIGHTDOWN = ( 0, 0, 1, 0, 1, 0)
FIRE = ( 0, 0, 0, 0, 0, 1)
def __init__(self, battery):
try:
self.dev=UsbDevice(0x1130, 0x0202, battery)
self.dev.open()
self.dev.handle.reset()
except NoMissilesError, e:
raise NoMissilesError()
def move(self, direction):
self.dev.handle.controlMsg(0x21, 0x09, self.INITA, 0x02, 0x01)
self.dev.handle.controlMsg(0x21, 0x09, self.INITB, 0x02, 0x01)
self.dev.handle.controlMsg(0x21, 0x09, direction+self.CMDFILL, 0x02, 0x01)
- Que pensez-vous est le problème avec votre code? On dirait que vous êtes en utilisant
self
droit. - Ce n'est pas sur le code ci-dessus, c'est une classe de prises de code de travail. Im demandant une plus élémentaires question; comment appeler une méthode dans une classe.
- J'ai demandé comment faire pour appeler une méthode d'une classe, à l'aide de cet exemple donné. Tous comme indiqué ci-dessus. J'ai été après une explication plutôt qu'une solution.
- j'ai été confrontée au même problème, alors que la création de la classe. J'ai utilisé l'auto.<methodName> pour appeler la méthode à l'intérieur de la classe. en dehors de la classe <ObjectName>.<MethodName>. J'espère que vous avez le point
Vous devez vous connecter pour publier un commentaire.
Le premier argument de toutes les méthodes est généralement appelé
self
. Il se réfère à l'instance pour laquelle la méthode est appelée.Disons que vous avez:
Ensuite, en faisant:
Il n'y a rien de spécial à propos de cet être appelé
self
, vous pouvez effectuer les opérations suivantes:Ensuite, en faisant:
Dans votre cas particulier:
(Comme suggéré dans les commentaires
MissileDevice.RIGHT
pourrait être plus approprié ici!)Vous pourrait déclarer tous vos constantes au niveau du module, donc vous pouvez faire:
Cependant, cela va dépendre de la façon dont vous voulez que votre code sera organisé!
RIGHT
est définie sur la classe, c'était sans doute l'intention de l'auteur qu'il soit appeléClassName.ATTRIBUTE
au lieu deone_instance.ATTRIBUTE
, comme si elle doit être le même pour toutes les instances, et vous n'avez pas besoin d'une instance de s'y référer; donc...MissileDevice.RIGHT
est probablement la "bonne façon" d'utiliser cette classe.Disons que vous avez un brillant classe Foo.
Eh bien, vous avez 3 options:
1) Vous souhaitez utiliser la méthode (ou attribut) d'une classe à l'intérieur de la définition de cette classe:
2) Vous souhaitez utiliser la méthode (ou attribut) d'une classe à l'extérieur de la définition de cette classe
3) Vous souhaitez utiliser la méthode (ou attribut) d'un instancié de la classe:
Si vous avez programmé dans toute autre langue avec des cours, en plus de python, ce genre de chose
est probablement inconnu. En python, la classe est une usine pour les objets, mais il est lui-même un objet; et les variables définies dans son champ d'application sont attachés à la classe, pas les instances renvoyé par la classe. pour consulter
bar
, ci-dessus, vous pouvez simplement appelerFoo.bar
; vous pouvez également accéder à des attributs de classe à travers les instances de la classe, commeFoo().bar
.Lorsque vous acecss un attribut sur un objet python, l'interprète de l'avis, lorsque le regarda attribut de la classe, et est une fonction, qu'il doit retourner un "lié" méthode au lieu de la fonction elle-même. Tout cela n'est prendre des dispositions pour que l'instance soit passé comme premier argument.