【问题标题】:Class object gets unexpected argument error类对象得到意外的参数错误
【发布时间】:2021-06-29 04:36:44
【问题描述】:

我是 Python 新手,正在尝试编写 Python 类。但在下文中,对于 car_1、car_2 和 car_3(粗体)的属性,我收到“意外参数”错误。如何纠正它?还是 Pycharm 的问题?谢谢!

import random


class Vehicle:
    def _init_(self, make, model, year, weight):
        self.make = make
        self.model = model
        self.year = year
        self.weight = weight


class Car(Vehicle):
    def _init_(self, make, model, year, weight, is_driving=True, trips_since_maintenance=0, needs_maintenance=False):
        super().__init__(make, model, year, weight)
        self.is_driving = is_driving
        self.trips_since_maintenance = 0
        self.needs_maintenance = needs_maintenance

    def drive(self):
        drive = 0
        if drive > 0:
            self.is_driving = True

    def stop(self):
        stop = 0
        while self.drive():
            stop += 1
            break
            self.is_driving = False
            self.trips_since_maintenance += 1
            if self.trips_since_maintenance >= 100:
                self.needs_maintenance = True

    def repair(self):
        self.needs_maintenance = False
        self.trips_since_maintenance = 0


def randomly_drive_car(car):
    drive_times = random.randint(1, 101)
    for i in range(drive_times):
        Car.drive()
        Car.stop()


**car_1 = Car('Honda', 'City', '2018', '1153 kg')
car_2 = Car('Toyota', 'Altis', '2018', '1745 kg')
car_3 = Car('Mazda', '_3', '2020', '1260 kg')**

randomly_drive_car(car_1)
randomly_drive_car(car_2)
randomly_drive_car(car_3)


【问题讨论】:

    标签: python-3.x python-class


    【解决方案1】:

    除了你需要为 init 方法添加两个下划线之外,其他都是正确的。

    class Vehicle:
        def __init__(self, make, model, year, weight):
           ...
    
    class Car(Vehicle):
        def __init__(self, make, model, year, weight, is_driving=True, trips_since_maintenance=0, needs_maintenance=False):
        super().__init__(make, model, year, weight)
    

    编辑: 在第 42/43 行,您正在调用“Car.drive”,您应该调用“car.drive()”(小写 C),因为您的函数参数称为“car”。通过使用Car.drive(),您试图将驱动方法作为类方法调用。

    编辑 2(来自 cmets):

    import random
    
    class Car(Vehicle):
    
        ...
    
        def take_trip(self):
            self.trips_since_maintenance += 1
            if self.trips_since_maintenance >= 100:
                self.needs_maintenance = True
    
    
    def randomly_drive_car(car):
        drive_times = random.randint(1, 101)
        for i in range(drive_times):
            car.take_trip()
    
    
    car_1 = Car('Honda', 'City', '2018', '1153 kg')
    car_2 = Car('Toyota', 'Altis', '2018', '1745 kg')
    car_3 = Car('Mazda', '_3', '2020', '1260 kg')
    
    randomly_drive_car(car_1)
    randomly_drive_car(car_2)
    randomly_drive_car(car_3)
    

    【讨论】:

    • 谢谢!进行了更正,但现在randomly_drive_car 似乎不起作用。我已经在drive(self) 处将分配drive = 0 更改为drive_times =0,但是无论我运行多少次,都没有随机计数trips_since_maintenance
    • 我认为您可以将 stop() 和 drive() 合并为一种方法。我真的不认为让他们分开有什么意义。
    • 您所要做的就是记录您进行了多少次旅行,并据此决定是否需要维护。您可以将所有这些都放在一种方法中,这几乎就是您所需要的。
    • 让你和我进行了编辑以简化功能。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 2018-06-15
    • 2017-09-12
    • 1970-01-01
    相关资源
    最近更新 更多