7

I am just starting to learn python and am getting confused about how to pass an instance of an object as an argument for a function, below is a little bit of code I made for practice and the basic idea is that there is one garage, this garage contains no cars, and you can add cars to the garage and view their details.

class Garage:
    cars = []

    def add_car(self, car):
        cars.append(car)

class Car:
    car_name, car_price, car_colour, car_miles, car_owners = "", "", "", "", ""

    def add_new_car(self, garage, name, price, colour, miles, owners):
        car_name = name
        car_price = price
        car_colour = colour
        car_miles = miles
        car_owners = owners

        garage.add_car(self)

def main(argv=None):    
    your_garage = Garage()

    while True:
        print "Your garage contains %d cars!" % len(your_garage.cars)
        print "1) Add a new car\n2) View your car's\n0) Leave the garage"
        user_input = raw_input("Please pick an option: ")

        if user_input == "1":
            add_car(your_garage)
        elif user_input == "2":
            view_cars(your_garage)
        elif user_input == "0":
            quit()

def add_car(garage):
    name = raw_input("Name: ")
    price = raw_input("Price: ")
    colour = raw_input("Colour: ")
    miles = raw_input("Miles: ")
    owners = raw_input("Owners: ")

    car = Car()
    car.add_new_car(garage, name, price, colour, miles, owners)

def view_cars(garage):
    for x in xrange(len(garage.cars)):
        print garage.cars[x].car_name
        print garage.cars[x].car_price
        print garage.cars[x].car_colour
        print garage.cars[x].car_miles
        print garage.cars[x].car_owners

if __name__ == "__main__":
    main()

My code might be very wrong or there might be an easy way to do this, I the way I pictured it was going to be that the new instance of car I created would be passed into the add_car() function in Garage so that it can be added to the list of cars. How can I do this?

1
  • I believe you can do this in Java by just passing method(this), and then 'this' being the instance of the object would be passed. Commented Dec 22, 2013 at 2:38

1 Answer 1

6

Maybe this simplified example will point you in the right direction. One of the main problems in your current code is that you should be setting instance-level attributes (for example, a car's color or a garage's inventory of cars) inside the __init__ method (or in some other method operating on instances), not up at the class level.

class Garage:
    def __init__(self):
        self.cars = []            # Initialize instance attribute here.

    def add_car(self, car):
        self.cars.append(car)

class Car:
    def __init__(self, color):
        self.color = color        # Ditto.

    def __repr__(self):
        return "Car(color={})".format(self.color)

def main():
    g = Garage()
    for color in 'red green blue'.split():
        car = Car(color)
        g.add_car(car)        # Pass the car to the garage's add_car method.
    print g.cars            # [Car(color=red), Car(color=green), Car(color=blue)]

if __name__ == "__main__":
    main()
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.