Эквивалент Python из очень простого примера программы на Java - PullRequest
0 голосов
/ 18 марта 2011

В настоящее время я читаю официальный учебник по Java и хочу сравнить пример кода с его эквивалентом на Python.Может кто-нибудь дать мне эквивалентный код Python для следующего кода Java:

class Bicycle {

   int cadence = 0;
   int speed = 0;
   int gear = 1;

   void changeCadence(int newValue) {
        cadence = newValue;
   }

   void changeGear(int newValue) {
        gear = newValue;
   }

   void speedUp(int increment) {
        speed = speed + increment;   
   }

   void applyBrakes(int decrement) {
        speed = speed - decrement;
   }

   void printStates() {
        System.out.println("cadence:"+cadence+" speed:"+speed+" gear:"+gear);
   }

}

и объектов, созданных из этого класса:

class BicycleDemo {

 public static void main(String[] args) {

      // Create two different Bicycle objects
      Bicycle bike1 = new Bicycle();
      Bicycle bike2 = new Bicycle();

      // Invoke methods on those objects
      bike1.changeCadence(50);
      bike1.speedUp(10);
      bike1.changeGear(2);
      bike1.printStates();

      bike2.changeCadence(50);
      bike2.speedUp(10);
      bike2.changeGear(2);
      bike2.changeCadence(40);
      bike2.speedUp(10);
      bike2.changeGear(3);
      bike2.printStates();
 }

}

Спасибо,

Бруно

Ответы [ 4 ]

1 голос
/ 18 марта 2011

Должно быть:

class Bicycle:

    def __init__(self):
        self.cadence = 0
        self.speed  = 0 
        self.gear  =1




    def changeCadence(self, newValue):
        self.cadence = newValue


    def changeGear(self, newValue):
        self.gear = newValue


    # and same for other functions



if __name__ == "__main__":
    obj = Bicycle()
    obj.changeCadence()
1 голос
0 голосов
/ 18 марта 2011

На случайный случай это не домашнее задание:

class Bicycle(object):
    def __init__(self, cadence=0, speed=0, gear=1, gearLabels=('A','B','C','D','E')):
        super(Bicycle,self).__init__()
        self.cadence    = cadence
        self.speed      = speed
        self.gearLabels = gearLabels
        self._gear      = None
        self.gear       = gear

    def speedUp(self, increment):
        self.speed += increment

    def applyBrakes(self, decrement):
        self.speed -= decrement

    @property
    def gear(self):
        return self.gearLabels[self._gear-1]

    @gear.setter
    def gear(self, gear):
        try:
            self._gear = self.gearLabels.index(gear) + 1
        except ValueError:
            if 0 < gear <= len(self.gearLabels):
                self._gear = gear
            else:
                raise ValueError("don't have gear {0}".format(gear))

    def incGear(self):
        self.gear = self._gear+1

    def decGear(self):
        self.gear = self._gear-1

    def __str__(self):
        return "cadence: {0}, speed: {1}, gear: {2}".format(self.cadence, self.speed, self.gear)

def main():
    bike1 = Bicycle()
    bike1.cadence = 50
    bike1.speedUp(10)
    bike1.gear = 2
    print(bike1)

    bike2 = Bicycle()
    bike2.cadence = 50
    bike2.speedUp(10)
    bike2.gear = 2
    bike2.cadence = 40
    bike2.speedUp(10)
    bike2.incGear()
    print(bike2)

if __name__ == "__main__":
    main()

Примечание:

  1. Я дал конструктору значения по умолчанию, так что если вы хотите создать велосипед (gear = 3), вы можете.

  2. Доступ к каденции и скорости осуществляется напрямую.

  3. Чтобы показать, как использовать методы получения и установки свойств, я сделал механизм доступным в виде короткого набора меток и частного свойства _gear, в котором хранится текущий индекс.

0 голосов
/ 18 марта 2011

Более полный и более правильный код - объект важен, поскольку он меняет модель класса - конструктор в этом случае не является, поскольку не является входными параметрами - в этом случае python быстрее инициализируется.

Весело ...

class Bicycle(object):
  cadence = 0
  speed = 0
  gear = 1

  def changeCadence(self, newValue):
    self.cadence = newValue

  def changeGear(self, newValue):
    self.gear = newValue

  def speedUp(self, increment):
    speed += increament

  def applyBrakes(self, descrement):
    speed -= decreament

  def printStates(self):
    print 'cadence: %s speed: %s gear: %s' % (self.cadence, self.speed, self.gear)

if __name__ == "__main__":
  # Create two different Bicycle objects
  bike1 = Bicycle()
  bike2 = Bicycle()

  # Invoke methods on those objects
  bike1.changeCadence(50)
  bike1.speedUp(10)
  bike1.changeGear(2)
  bike1.printStates()

  bike2.changeCadence(50)
  bike2.speedUp(10)
  bike2.changeGear(2)
  bike2.changeCadence(40)
  bike2.speedUp(10)
  bike2.changeGear(3)
  bike2.printStates()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...