Python 赋值类前引用的局部变量&;模块
这可能是我错过的一个非常简单的修复方法。在课堂上,我正在研究对象操作。我已经建立了以下程序,以获取两个用户输入,并在程序结束时显示速度。我已经多次调整程序,但不断收到以下错误消息:“分配前引用了局部变量“car”Python 赋值类前引用的局部变量&;模块,python,class,object,Python,Class,Object,这可能是我错过的一个非常简单的修复方法。在课堂上,我正在研究对象操作。我已经建立了以下程序,以获取两个用户输入,并在程序结束时显示速度。我已经多次调整程序,但不断收到以下错误消息:“分配前引用了局部变量“car” class Car: # accepts arguments for car's year model,make,speed def __init__(self,year,make,speed): self.__year_model=year
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()
当前输出(出于保密目的删除文件名):
车年:1976年
汽车制造:玩具
回溯(最近一次呼叫最后一次):
文件,第18行,在
main()
文件,第9行,主
汽车=汽车。汽车(年份、品牌、速度)
UnboundLocalError:分配前引用的局部变量“car”
您的模块名称错误,您导入的是Car
而不是Car
,因此您必须按类访问Car
car= Car.Car(year,make,get_speed)
拼写错误的是您的类实例实例化。以下是主程序和Car模块的替换:
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()
改变这个
car= car.Car(year,make,get_speed)
到
在
car.car(…)
中,您认为car
指的是什么?这个类看起来像Java,是用Python编写的。为什么所有这些getter和setter?为什么所有这些属性都有两个前导下划线(不,两个前导下划线不会使属性从外部不可访问)?作为旁注,您确实不想使用以双下划线开头的属性名称(请参阅),而且使用setter和getter在Python中也不是一件容易的事情(请参阅)。另外,请注意,“模块应该有短的、全小写的名称。“-所以你的模块应该命名为‘car’而不是‘car’。我已经将代码更新为car=car.car(年份、品牌、速度)。我现在收到一条错误消息,说get_速度未定义。然后我试着用相同的响应将其改为speed,\u speed,\u speed都抛出相同的错误。如果我将参数更改为(year,make,0),错误代码将显示:“Car”对象没有属性speed。我错过了什么?汽车是一个模块,不是一个类。如果它是来自汽车进口车的,它会工作的
是的,你是对的,谢谢你在这方面的帮助。我现在有这种情况发生。我已将代码更新为car=car.car(年份、品牌、速度)。我现在收到一条错误消息,说get_速度未定义。然后我试着用相同的响应将其改为speed,\u speed,\u speed都抛出相同的错误。如果我将参数更改为(year,make,0),错误代码将显示:“Car”对象没有属性speed。我错过了什么?好的。我将更新答案以显示如何解决此问题。
car= Car.Car(year,make,get_speed)