【问题标题】:OOP inheritance, how to get variable of parent type in python?OOP继承,如何在python中获取父类型的变量?
【发布时间】:2020-02-18 20:09:41
【问题描述】:

到目前为止我有这个代码:

class vehicle:
    def __init__(self, numWheels, listWeightOfItem):
        self.numWheels = numWheels
        self.listWeightOfItem = listWeightOfItem

class car(vehicle):
    def __init__(self, numWheels, listWeightOfItem, listWeightPeople):
        vehicle.__init__(self, numWheels, listOfWeightItem)
        self.listWeightPeople = listWeightPeople

Car 将从车辆继承。 汽车应该有一辆拖车类型的车辆,我不知道如何将其放入代码中。我想过创建一个类变量,但我认为它没有意义,我如何确保拖车是车辆类型而不是汽车?

【问题讨论】:

  • 你可以创建更多的类作为一个子类
  • 你可以有例如类拖车(车辆)
  • 顺便说一下,变量和函数名应该遵循lower_case_with_underscores的风格,类名应该遵循CamelCase的风格。

标签: python python-3.x oop inheritance initialization


【解决方案1】:

Car 将从车辆继承。汽车应该有一辆拖车类型的车辆,我不知道如何将其放入代码中。我想过创建一个类变量,但我认为它没有意义,我如何确保拖车是车辆类型而不是汽车?

为什么是类变量而不是实例变量?

我如何确定拖车是车辆而不是汽车?

为什么会有与此相关的风险?


如果我对情况的理解正确,您可以这样做:

class Vehicle:
    def __init__(self, num_wheels: int, list_weight_item: float) -> None:
        self.num_wheels = num_wheels
        self.list_weight_item = list_weight_item

    def __repr__(self) -> str:
        return f"Vehicle(num_wheels={self.num_wheels}, " \
               f"list_weight_item={self.list_weight_item})"


class Trailer(Vehicle):

    def __init__(self, num_wheels: int, list_weight_item: float, cargo_type: str) -> None:
        super().__init__(num_wheels, list_weight_item)
        self.cargo_type = cargo_type

    def __repr__(self) -> str:
        return f"Trailer(num_wheels={self.num_wheels}, " \
               f"list_weight_item={self.list_weight_item}, " \
               f"cargo_type={self.cargo_type})"


class Car(Vehicle):
    def __init__(self, num_wheels: int, list_weight_item: float, list_weight_people: float,
                 trailer: Trailer = None) -> None:
        super().__init__(num_wheels, list_weight_item)
        self.list_weight_people = list_weight_people
        self.trailer = trailer

    def __repr__(self) -> str:
        return f"Car(num_wheels={self.num_wheels}, " \
               f"list_weight_item={self.list_weight_item}, " \
               f"list_weight_people={self.list_weight_people}, " \
               f"trailer={self.trailer})"


t_1 = Vehicle(2, 100)
t_2 = Trailer(num_wheels=2, list_weight_item=1000, cargo_type='car')
t_3 = Car(num_wheels=4, list_weight_item=2000, list_weight_people=200, trailer=t_2)
t_4 = Car(num_wheels=4, list_weight_item=2500, list_weight_people=300)

print(t_1, t_2, t_3, t_4, sep='\n')

【讨论】:

    【解决方案2】:

    您可以只制造另一类子类车辆。您没有指定要在其中包含的内容,因此我将其留空供您填写。

    class vehicle:
        def __init__(self, numWheels, listWeightOfItem):
            self.numWheels = numWheels
            self.listWeightOfItem = listWeightOfItem
    
    class car(vehicle):
        def __init__(self, numWheels, listWeightOfItem, listWeightPeople):
            vehicle.__init__(self, numWheels, listOfWeightItem)
            self.listWeightPeople = listWeightPeople
    
    class trailer(vehicle):
        def __init__(self):
            pass
    

    【讨论】:

    • 但是拖车不是拖车类型而不是车辆类型吗?
    • 不,不会的
    • 它是子类车辆
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 2018-02-24
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    相关资源
    最近更新 更多