2017-08-28 2 views
0

programmiert ich eine Klasse aswell als eine Definition mit dem backthought die, wenn Sie setzen jedes Mal einen Wert unter Verwendung von Klassenvariablen Sie den Gesamtbetrag immer erinnern kann durch die Definition mitPython - Classes- Definition

class Hand(): 

    def __init__(self, Hand=0): 
     self.Hand = Hand 

    def getHand(self, neue_Hand): 
     self.Hand = neue_Hand 

    def set_hand(self): 
     return self.Hand 

c = Hand() 

def Aufruf(): 
    Total = 0 
    Total += c.getHand(0) 
    return Total 


c.getHand(12) 

Aufruf() 

Es Ändert den Wert jedes Mal, akkumuliert es aber nicht so, wie es sein sollte.

+1

Sie sollten sich ab sofort an englische Namen gewöhnen. Es wird viel einfacher für die Menschen da draußen sein, Sie zu verstehen und zu helfen. –

+0

Sind Sie in Ihrem Code richtig eingerückt? In dem Code, den Sie hier gepostet haben, ist die Einrückung deaktiviert. Sie müssen nach der Methodenüberschrift und der Klassen-Definition einrücken – bendl

+1

'c.getHand' gibt None zurück - Sie können nicht' + = None' zu ​​'Total'. –

Antwort

2

Sie haben die Funktionalität in Ihren Gettern und Setter gemischt. Der Getter sollte die Variable zurückgeben und der Setter sollte den Wert festlegen.

class Hand(): 

    def __init__(self,Hand=0): 
     self.Hand = Hand 

    def getHand(self): 
     return self.Hand 

    def set_hand(self, neue_Hand): 
     self.Hand = neue_Hand 

    def increment_hand(self, neue_Hand_incremenet): 
     self.Hand += neue_Hand_incremenet 

c = Hand(10) 
c.getHand() 
>> 10 
c.set_hand(20) 
c.getHand() 
>> 20  

def Aufruf(): 
    Total = 0 
    Total += c.getHand() 
    return Total 

Aufruf() 
>> 20 
c.increment_hand(10) 
Aufruf() 
>> 30 

Auch als eine Randnotiz: Wenn Sie genau hinsehen, werden Sie Ihre Methode Aufruf ist eigentlich eine exakte Kopie (logisch) des getHand() Verfahren realisieren. Wenn Sie die Variable total = 0 innerhalb der Methode Codeblock instanziiert, wird dieser Wert immer auf 0 gesetzt werden, wenn die Methode aufgerufen wird, wird der Wert von c.getHand() bedeutet immer nur den Wert, die

+0

Ich denke, ich habe mich nicht vollständig ausgedrückt, was ich machen möchte ist: Wenn ich den Wert mehrmals über c.set_hand() ändere, wird dieser Wert gespeichert und über die vorherigen Werte in Aufruf hinzugefügt. Beispiel ich setze c.set_hand (10) und after (20), sollte ich von Aufruf() = 30 bekommen – Roman

+0

Ich werde einige Änderungen an den Code hinzufügen, aber es wird etwas anders sein als Ihre aktuelle Einrichtung. Das Konzept von Getter und Setter sollte dasselbe wie in meinem Beispiel sein. Ich werde jetzt einen neuen Code hinzufügen – AK47

+0

@Roman degradiert meine Antwort? Die Antwort, die du angenommen hast, funktioniert nicht für deinen Code, wenn du einfach seine neue Methode get_hand_bigger() hinzufügst und sie immer noch mit deiner get_hand() -Methode im Aufruf verwendest. – AK47

0

Ihre Klassenmethode zurückgegeben getHand nicht der Fall ist gibt einen beliebigen Wert zurück, wird jedoch als solcher aufgerufen. Versuchen Sie dies:

+0

Ich glaube, ich habe mich nicht vollständig ausgedrückt, was ich machen möchte ist: Wenn ich den Wert mehrmals über c.set_hand() ändere, wird dieser Wert gespeichert und zu vorherigen Werten in Aufruf hinzugefügt. Beispiel ich setze c.set_hand (10) und nach (20) sollte ich von Aufruf() = 30 bekommen – Roman

0

Verwenden Sie die Methode Addition für den Wert ändern, und verwenden Sie keine Großbuchstaben oder CamelCase in Ihrer Klasse.

class Hand: 
    def __init__(self, 0): 
    self.hand = hand 
    def get_hand_bigger(self, addition): 
     self.hand += addition 
Verwandte Themen