Nach Modularen Aufbau ASCII Fehler?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ShoxX
User
Beiträge: 24
Registriert: Sonntag 15. April 2012, 22:33

Hallo

Ich habe zwei Klassen in einer Datei die auch beide funktionieren,
wenn ich jetzt einen Modularen Aufbau mache und beide Klassen trenne und sie in eigene Dateien packe bekomme ich immer diesen Fehler:
Traceback (most recent call last):
File "C:/Python27/Ride.py", line 1, in <module>
from Train import Train
File "C:/Python27\Train.py", line 19
SyntaxError: Non-ASCII character '\xe4' in file C:/Python27\Train.py on line 19, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
Denn bekomme ich aber nicht wenn ich beide Klassen zusammen habe,
hier mal meine beiden Klassen:
Train.py

Code: Alles auswählen

class Train(object):
  """ Klasse definiert einen Zug """
  
  def __init__(self,__seats):
    self.__seats = __seats
    self.__speed = 0
    self.__passengers = 0

  def getPassengers(self):
      return self.__passengers

  def getSpeed(self):
      return self.__speed

  def getSeats(self):
      return self.__seats
    
  def changeSpeed(self,action,__speed):
    """ Methode zum ändern der Geschwindigkeit """
    if __speed < 0:
      print 'Nur positive Zahlen eingeben'
      return
    if action == 'bremsen':
      act = -1
      if self.__speed <= __speed:
        print 'Zug fährt bereits langsamer'
        return
    elif action == 'beschleunigen':
      act = 1
    else:
      print "Erbitte klare Anweisung"
      return
    while self.__speed != __speed:
      self.__speed += 10*act
      print self.__speed
    
  def __getIn(self,people):
    """ Methode zum Einsteigen von Personen """
    if self.__speed == 0:
      self.__seats -= people
    else:
      print '''Einsteigen nicht möglich.
      Zug fährt mit %s km/h.''' %(self.__speed)
    
  def __getOut(self,people):
    """ Methode zum Aussteigen von Personen """
    if self.__speed == 0:
      self.__seats += people
    else:
      print '''Aussteigen nicht möglich.
      Zug fährt mit %s km/h.''' %(self.__speed)

  def changePeople(self, p_in=0, p_out=0):
    if p_in:
      self.__getIn(p_in)
      self.__countPassengers(p_in)
    if p_out:
      self.__getOut(p_out)
    print "Aktuelle Sitzplätze: %s" %(self.getSeats())
      
  def __countPassengers(self, people):
      self.__passengers += people


  def __add__(self, dildo):
      summe = self.__passengers + dildo.getPassengers()
      print "Gesamtpassagierzahl %s" %(summe)
Ride.py

Code: Alles auswählen

from Train import Train

class Ride(Train):

    def __init__(self, seats, line):
        Train.__init__(self, seats)
        self.__line = line
        self.__stops = 0

    def stationStop(self):
        self.changeSpeed("bremsen", 0)

        if self.__stops < len(self.__line)-1:
            self.__stops +=1
            
        print "Jetzt halt in %s" %(self.__line[self.__stops])
Ich benutze die IDLE von Python unter Windows zum versuchen.
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Wahrscheinlich

Code: Alles auswählen

# -*- coding: utf-8 -*-
am Anfang der Datei vergessen.

Grüße,
anogayales
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Man sollte noch erwähnen, dass es in Python unüblich ist, für jede Klasse eine eigene Datei zu erstellen.

Desweiteren sieht Dein Code arg nach Java aus... "Getter" und "Setter" sind in Python meist unnötig und wenn, löst man das mit Properties. Zudem solltest Du keine doppelten Unterstriche in Deinem Code verwenden - selbst einzelne sind "internen" Attributen per Konvention vorbehalten. Allgemein kapselt man in Python keine Attribute.

Du solltest Dir auch mal den Styleguide PEP8 durchlesen und Deinen Code entsprechend anpassen. Du verwendest zwei, PEP8 definiert vier Spaces als Einrückung - das fällt neben mixedCase-Namen sofort negativ ins Auge ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

ShoxX hat geschrieben:

Code: Alles auswählen

  def changeSpeed(self,action,__speed):
Ergänzend zu Hyperion: Die Parameter in einer Funktionssignatur mit einem Unterstrich beginnen zu lassen ist hochgradig merkwürdig.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Ist "dildo" tatsächlich englisch für Passagier? Ich musste da an etwas anderes denken …
BlackJack

@ShoxX: Was soll denn `Ride` darstellen? Ich habe das Gefühl, dass die Vererbung hier falsch ist.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackJack hat geschrieben:@ShoxX: Was soll denn `Ride` darstellen? Ich habe das Gefühl, dass die Vererbung hier falsch ist.
Ich habe hingegen eher das Gefühl das dieser ganze Entwurf komplett für die Tonne ist. Mit haben sich bei fast jeder Zeile die Fußnägel eingerollt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten