飞船对象

3 投票
2 回答
1245 浏览
提问于 2025-04-15 20:45

我正在尝试制作一个程序,用来创建一艘宇宙飞船。我使用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

在你的 status 方法里,self 没有被定义,因为你把这个方法设成了静态方法。其实把它设成非静态方法更合理,因为每艘船都有自己独特的名字。所以你只需要这样写:

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

然后再调用:

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

每艘船都有自己的燃料,所以用静态的方式不太合适。如果你不想让这个参数看起来像个方法,可以考虑用属性。这样可以把燃料的值检查也包含进去。

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.")

撰写回答