Python 赋值类前引用的局部变量&;模块

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

这可能是我错过的一个非常简单的修复方法。在课堂上,我正在研究对象操作。我已经建立了以下程序,以获取两个用户输入,并在程序结束时显示速度。我已经多次调整程序,但不断收到以下错误消息:“分配前引用了局部变量“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
    
    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)