Python 类定义和创建对象 [duplicate] 的问题

Problem with Python class definition and creating an object [duplicate]

提问人:Marni Velick 提问时间:6/23/2022 最后编辑:Karl KnechtelMarni Velick 更新时间:6/23/2022 访问量:87

问:

我正在为类做一个作业,我必须创建一个“Car”类,然后创建该类的对象并调用方法。

该类将具有 3 个数据属性 - __year_model 和 __make 应该被接受为参数,属性 __speed 设置为 0。

我有这个代码:

class Car:

    def __int__(self, year_model, make):
        self.__year_model = year_model
        self.__make = make
        self.__speed = 0

    def accelerate(self):
        self.__speed += 5

    def brake(self):
        self.__speed - + 5

    def get_speed(self):
        return self.__speed


def main():
    my_car = Car("2022 Trailblazer", "Chevy")

    for i in range(5):
        my_car.accelerate()
        print(my_car.get_speed())

    for i in range(5):
        my_car.brake()
        print(my_car.get_speed())

我收到一些关于此代码的错误。首先,在制动方法中 - 错误说“语句似乎没有效果”。当我在 main 函数中创建对象时,我收到“2022 Trailblazer”和“Chevy”的错误“unexpected argument”。最后,当我运行代码时,我没有得到任何输出 - 我应该看到速度的打印输出。

如何解决这些问题?

Python 对象 属性 参数传递

评论

0赞 Guy 6/23/2022
它应该是 ,而不是__init____int__
0赞 Guy 6/23/2022
你还应该看看self.__speed - + 5
0赞 Chris 6/23/2022
self.__speed - + 5相当于写作。将创建一个值,但不会修改任何内容。该方法是无用的。Python 的警告告诉你这一点。self.__speed - 5
0赞 Karl Knechtel 6/23/2022
欢迎回到 Stack Overflow。请阅读如何提问ericlippert.com/2014/03/05/how-to-debug-small-programs,并在提问之前尝试追踪问题。一种重要的技术是使用调试跟踪来确保调用方法。“最后,当我运行代码时,我没有得到任何输出 - 我应该看到速度的打印输出”嗯,是的;一旦出现未捕获的异常,程序就无法运行。
0赞 Karl Knechtel 6/23/2022
“我非常努力地寻找答案,但不确定我做错了什么” 您是否尝试将错误消息复制并粘贴到搜索引擎中?“在制动方法中 - 错误说”语句似乎没有效果。这不是实际的错误消息 - 它是来自 IDE 的警告。但是,它仍然可以很容易地搜索。仔细查看代码非常重要。想一想:打算做什么?这看起来对吗?self.__speed - + 5

答:

0赞 Chorche Wolloh 6/23/2022 #1

首先,您在 init 方法中有一个错误,因此您的 Class 不接受任何变量。其次,如果你决定将类实例化放在一个方法中,你需要返回变量,并将 main() 函数的结果分配给一个。以下是您的固定代码,似乎按预期运行:

class Car:
    # constructor method is inIt not int
    def __init__(self, year_model, make):
        self.__year_model = year_model
        self.__make = make
        self.__speed = 0

    def accelerate(self):
        self.__speed += 5

    def brake(self):
        self.__speed -= 5

    def get_speed(self):
        return self.__speed

# you need to return my_car from this function for it to work
def main():
    my_car = Car("2022 Trailblazer", "Chevy")
    return my_car

# Instantiating your function
my_car = main()

for i in range(5):
    my_car.accelerate()
    print(my_car.get_speed())

for i in range(5):
    my_car.brake()
    print(my_car.get_speed())

希望这有帮助!

评论

1赞 Chorche Wolloh 6/23/2022
同样正如人们提到的,要减少变量,您需要使用“-=”而不是“- +”。
0赞 juanpa.arrivillaga 6/23/2022
该方法应该包含所有这些,它只需要按照惯例在守卫中调用mainif __name__ == "__main__": ...