如何在python中的函数中将对象的实例作为参数传递? [英] How do I pass instance of an object as an argument in a function in python?

查看:142
本文介绍了如何在python中的函数中将对象的实例作为参数传递?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚开始学习python并且对如何将对象的实例作为函数的参数传递感到困惑,下面是我为练习而编写的一些代码,基本思想是有一个车库,此车库不包含汽车,您可以将汽车添加到车库并查看其详细信息.

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()

我的代码可能非常错误,或者可能有一种简单的方法可以做到这一点,我想象的方式是,我创建的汽车的新实例将被传递到 Garage 中的 add_car() 函数中,所以它可以添加到汽车列表中.我该怎么做?

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?

推荐答案

也许这个简化的示例会为您指明正确的方向.当前代码中的主要问题之一是您应该在 __init__ 方法(或其他方法)中设置实例级属性(例如,汽车的颜色或车库的汽车库存)在实例上操作),而不是在类级别.

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 c in 'red green blue'.split():
        c = Car(c)
        g.add_car(c)        # 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()

这篇关于如何在python中的函数中将对象的实例作为参数传递?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆