Reputation: 37
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
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
Reputation: 187
change this
car= car.Car(year,make,get_speed)
to
car= Car.Car(year,make,get_speed)
Upvotes: 0
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