2016-05-18 7 views
1

Ich versuche, die Rückgabe einer Methode zu einer Variablen zuzuordnen und mit diesem Fehler stecken.fehlt 1 benötigt positional Argument: 'self' beim Zuweisen einer Methode zu einer Variablen

class MyClass(): 

    def my_def(self): 
     return "Hello" 

    my_variable = my_def() 

Hier ist das Java-Äquivalent von dem, was ich tun möchte.

Ich bin sicher, das ist etwas einfaches, aber ich konnte nicht einmal die richtigen Worte finden, um dies zu googeln. Jede Hilfe wird geschätzt.

+0

Es ist gut, den ganzen Fehler in den Körper Ihrer Frage zu stellen. –

+5

Dies würde ein Klassenattribut für 'MyClass' setzen. Ich bin mir ziemlich sicher, dass du das nicht willst. Kannst du bitte den Kontext dieses Codes erklären, damit wir dir Ratschläge geben können, wie es richtig gemacht wird? –

+1

Werfen Sie auch einen Blick auf PEP8, camelCase in Methodennamen verletzt meine Augen (ja, ich bin ein PEP8 nazy). –

Antwort

2

Beginnen wir mit dem Unterschied zwischen Methoden und Funktionen, grundsätzlich gehört eine Methode zu einem Objekt, eine Funktion dagegen nicht. So zum Beispiel

def myFunction(): 
    return "F" 

class MyClass: 
    value = 0 
    def myMethod(self, value): 
     old = self.value 
     self.value = value 
     return old 

myClassInstance = MyClass() 
print myClassInstance.myMethod(3) 
# 0 
print myClassInstance.myMethod(33) 
# 3 
print myFunction() 
# F 

Beachten Sie, dass das Verfahren auf die Instanz gebunden und es macht keinen Sinn, die Methode aufzurufen, bevor die Instanz erstellt wird. In diesem Sinne sollte Ihr Fehler mehr Sinn machen. Die Methode kann nicht ohne eine Instanz (self) aufgerufen werden. Dies ist nicht die einzige Art von Methode, zum Beispiel gibt es "statische Methoden". Statische Methoden sind für die Klasse definiert, sie werden jedoch ohne eine Instanz aufgerufen. Zum Beispiel:

class MyClass: 
    @staticmethod 
    def myStaticMethod(): 
     return "static method" 
    # Consider using an instance attribute instead of a class attribute 
    def __init__(self): 
     self.instance_attribute = MyClass.myStaticMethod() 
# Or if you need a class attribute it needs to go outside the class block 
MyClass.class_attribute = MyClass.myStaticMethod() 
+0

Das bedeutet, ich kann den Rückgabewert der statischen Methoden nicht direkt einer Klassenvariablen zuweisen, oder? –

+1

Es ist nicht möglich, dass Sie nicht "direkt zuweisen" können. Das Klassenobjekt existiert erst am Ende des Klassenblocks. Im Gegensatz zu Funktionen können Sie keine rekursiven Aufrufe von Klassenobjekten im Klassenblock haben, so dass 'MyClass.myStaticMethod' außerhalb des Klassenblocks aufgerufen werden muss. Es gibt keinen Nachteil, es auf diese Weise zu tun, außer es ist ein bisschen hässlicher. –

+0

Ich bekomme es, Danke !!! –

Verwandte Themen