Космические объекты - PullRequest
       10

Космические объекты

3 голосов
/ 23 марта 2010

Я пытаюсь создать программу, которая создает космический корабль, и я использую метод status () для отображения названия корабля и стоимости топлива. Тем не менее, это не похоже на работу. Я думаю, что возможно что-то напутал с методом status (). Я также пытаюсь сделать так, чтобы я мог изменить значения топлива, но я не хочу создавать новый метод для этого. Я думаю, что где-то там я сделал ужасный поворот. Помогите пожалуйста!

class Ship(object):

    def __init__(self, name="Enterprise", fuel=0):
        self.name=name
        self.fuel=fuel
        print "The spaceship", name, "has arrived!"

    def status():
        print "Name: ", self.name
        print "Fuel level: ", self.fuel
    status=staticmethod(status)

def main():

    ship1=Ship(raw_input("What would you like to name this ship?"))
    fuel_level=raw_input("How much fuel does this ship have?")
    if fuel_level<0:
        self.fuel=0
    else:
        self.fuel(fuel_level)

    ship2=Ship(raw_input("What would you like to name this ship?"))
    fuel_level2=raw_input("How much fuel does this ship have?")
    if fuel_level2<0:
        self.fuel=0
    else:
        self.fuel(fuel_level2)

    ship3=Ship(raw_input("What would you like to name this ship?"))
    fuel_level3=raw_input("How much fuel does this ship have?")
    if fuel_level3<0:
        self.fuel=0
    else:
        self.fuel(fuel_level3)

    Ship.status()

main()

raw_input("Press enter to exit.")

Ответы [ 2 ]

4 голосов
/ 23 марта 2010

У каждого корабля есть свое топливо, поэтому не стоит использовать статическое электричество. Если вы не хотите, чтобы параметр выглядел как метод, рассмотрите свойство. Он также включает проверку стоимости топлива.

class Ship(object):

    def __init__(self, name="Enterprise", fuel=0):
        self.name = name
        self._fuel = fuel
        print "The spaceship", name, "has arrived!"

    def status(self):
        print "Name: ", self.name
        print "Fuel level: ", self.fuel

    @property
    def fuel(self):
        return self._fuel

    @fuel.setter
    def fuel(self,level):
        if level < 0:
            self._fuel = 0
        else:
            self._fuel = level

В main () рассмотрите циклы для инициализации кораблей и отображения статуса вместо повторяющегося кода, и используйте ship.fuel вместо self.fuel. self допустимо только в методах класса.

def main():

    ships = []
    for n in range(4):
        ship = Ship(raw_input("What would you like to name this ship?"))
        ship.fuel = int(raw_input("How much fuel does this ship have?"))
        ships.append(ship)

    for ship in ships:
        ship.status()

main()
raw_input("Press enter to exit.")
4 голосов
/ 23 марта 2010

В вашем status метод self не определен, потому что вы сделали его статическим методом. Имеет смысл сделать его нестатичным, поскольку у каждого корабля есть свое индивидуальное имя. Просто скажи

def status(self):
    print "Name: ", self.name
    print "Fuel level: ", self.fuel

и позже звоните

ship1.status()
ship2.status()
ship3.status()
...