Local Variable referenced before assignment Class & Module

This is probably a very easy fix that I am missing. In class I am working on object manipulation. I have built the following program to take two user inputs and display a speed at the end of the program. I have tweaked the program multiple times but keep getting the following error message: "local variable "car" referenced before assignment.

class Car:
    # accepts arguments for car's year model,make,speed
    def __init__(self,year,make,speed):
        self.__year_model=year
  
        self.__make=make
    
        self.__speed=speed
    
    # set mutators
    def set_year_model(self,year):
        self.__year=year
    
    def set__make(self,make):
        self.__make=make
    
    def set__speed(self,speed):
        self.__speed=0

    # get returns
    def get_year_model(self):
        return self.__year
    
    def get_make(self):
        return self.__make
    
    def get__speed(self):
        return self.__speed
    
    # movement methods

    def accelerate(self):
        self.speed +=5
    
    def brake(self):
        self.speed -=5
    
    def get_speed(self):
        return self.__speed








# This program imports car class and utilizes it to display
# speed of car to user
import Car

def main():
    year= input("Car Year: ")
    make= input("Car Make: ")

    car= car.Car(year,make,get_speed)
    
    for count in range(5):
        car.accelerate()
        print("The current speed is:  ", car.get_speed())

    for count in range(5):
        car.brake()
        print("The current speed is now:  ", car.get_speed())
main()

Current output (file names removed for privacy):

Car Year: 1976
Car Make: TOY
Traceback (most recent call last):
  File , line 18, in <module>
    main()
  File , line 9, in main
    car= car.Car(year,make,get_speed)
UnboundLocalError: local variable 'car' referenced before assignment

Upvotes: 0

Views: 468

Answers (3)

VirtualScooter
VirtualScooter

Reputation: 1888

It's your class instance instantiation that is misspelled. Here's a replacement for your main program and the Car module:

class Car:
    # accepts arguments for car's year model,make,speed
    def __init__(self,year,make,speed):
        self.__year_model = year
        self.__make = make
        self.__speed = speed
    
    # set mutators
    def set_year_model(self,year):
        self.__year = year
    
    # Replaced middle "dunder" with single underscore
    def set_make(self,make):
        self.__make = make

    # Replaced middle "dunder" with single underscore   
    def set_speed(self,speed):
        self.__speed = speed

    # get returns
    def get_year_model(self):
        return self.__year
    
    def get_make(self):
        return self.__make

    # Replaced middle "dunder" with single underscore
    def get_speed(self):
        return self.__speed
    
    # movement methods
    def accelerate(self):
        self.__speed += 5
    
    def brake(self):
        self.__speed -= 5

    # Removed "duplicate" get_speed() method


# This program imports car class and utilizes it to display
# speed of car to user
import Car

def main():
    year = input("Car Year: ")
    make = input("Car Make: ")

    # Replaced "get_speed" with zero
    car = Car.Car(year, make, 0)
    
    for count in range(5):
        car.accelerate()
        print("The current speed is:  ", car.get_speed())

    for count in range(5):
        car.brake()
        print("The current speed is now:  ", car.get_speed())
main()

Upvotes: 0

user3697625
user3697625

Reputation: 187

change this

car= car.Car(year,make,get_speed)

to

car= Car.Car(year,make,get_speed)

Upvotes: 0

rozumir
rozumir

Reputation: 905

You had wrong module name, you import Car not car, so you must access to Car class by

car= Car.Car(year,make,get_speed)

Upvotes: 1

Related Questions