2017-12-21 3 views
-1

Die Idee des Programms ist es, eine "Sprache" zu nehmen und sie in Zahlen zu verwandeln. Die Sprache ist ganz einfach bauen"'int' Objekt hat kein Attribut 'getal'" in der selbst gemachten Klasse Python

K = 10 P = 20 T = 40 V = 80 etwas kleiner als 10 werden in normalen Zahlen dargestellt werden

Jetzt sollten die Zahlen nicht sei etwas worüber ich mir Sorgen mache, erkläre ich das, damit es leichter ist, das zu erreichen, was ich hier erreichen möchte.

ich aufbauen eine Klasse namens "Mangarevaans", die wie folgt aussieht:

def mag2arab(getal): #this function is designed to turn the letters into the normal numbers we're used to 
mag = str(getal) 
waarde = {"K": 10, "P": 20, "T": 40, "V": 80} 
arab = 0 

for index, j in enumerate(mag): 
    if index == 0 and j.isnumeric(): 

     if len(getal) == 1: 
      x = 0 
     else: 
      x = 1 

     arab += int(j) * waarde[mag[x]] 
    elif j.isnumeric(): 
     arab += int(j) 
    elif not (str(mag[0]).isnumeric() and index == 1): 
     arab += waarde[j] 
return arab 

class Mangarevaans(): 
    """ 
    >>>612 // Mangarevaans(26) 
    Mangarevaans('P3') 
    """ 

    def __init__(self, getal): 

     if isinstance(getal, int): 
      assert 1 <= getal < 799, 'ongeldige waarde' #this is one of the rules of the language that if there is a number it should be between these values 
      self.getal = getal 


     else: 
      for letter in getal: 
       if isinstance(getal, str): 
        for letter in getal: 
         if letter in "VTPK": 
          self.getal = getal 
       else: 
        raise AssertionError('ongeldige waarde') 
      self.getal = mag2arab(getal) 

    def __int__(self): 
     return self.getal 

    def __str__(self): 
     return arab2mag(self.getal) 

    def __repr__(self): 
     return f"Mangarevaans('{str(arab2mag(self.getal))}')" 

    def __rfloordiv__(other, self): 
     return Mangarevaans(other // self.getal) #The problem occurs here 

Nun, wenn ich die doctest

""" 
    >>>612 // Mangarevaans(26) 
    Mangarevaans('P3') 
    """ 

ich einen Fehler ausführen möchten sagen

'int' Objekt hat kein Attribut 'getal'

aber wenn ich mich selbst in eine Zeichenfolge ändern, die ich bekommen

‚str‘ Objekt kein Attribut ‚getal‘

hat, wie kann ich, wenn das Attribut „getal“ mit „str gehört definieren "oder" int "?

Kann mir jemand helfen?

Vielen Dank schon

Antwort

1

self ist immer das erste Argument, auch in den r* (rechts) Methoden. So schreiben:

def __rfloordiv__(self, other): 
    return Mangarevaans(other // self.getal) 

statt:

def __rfloordiv__(other, self): 
    return Mangarevaans(other // self.getal) 
+0

Das in der Tat funktioniert der Trick. Vielen Dank –

+0

Großartig, dass es geholfen hat. Übrigens, Sie haben das Privileg [upvote] (http://stackoverflow.com/help/privileges/vote-up). ;) –

+0

Hey, das hat vorher nicht funktioniert, weil ich nicht "erfahren" genug war: D –

Verwandte Themen