首页 > 解决方案 > 我的输出打印不正确,我似乎不明白为什么

问题描述

这是我的代码。我以为我做的一切都是正确的,这是我最后的手段

class Vehicle(object):
    def __init__(self, make, model, year=2000):
        self.make = make
        self.model = model
        self.year = year 

    @property
    def year(self):
        return self._year

    @year.setter
    def year(self, year):
        self.year = None
        if (year > 2000 and year < 2018):
            self._year = year

    @property
    def make(self):
        return self._make

    @make.setter
    def make(self, value):
        self._make = value

    @property
    def model(self):
        return self._model

    @model.setter
    def model(self, value):
        self._model = value

class Truck(Vehicle):
    def __init__(self, make, model, name=None):
        Vehicle.__init__(self, make, model, name)
        self.name = name

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, value):
        self._name = value

class Car(Vehicle):
    def __init__(self, make, model, name=None):
        Vehicle.__init__(self, make, model, name)
        self.name = name

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, value):
        self._name = value


class DodgeRam(Truck):
    make = "Dodge"
    model = "Ram"

    def __init__(self, year):
        Truck.__init__(self, year, DodgeRam.make, DodgeRam.model)
        self.year = year

    @property
    def year(self):
        return self._year

    @year.setter
    def year(self, year):
        self._year = year

class HondaCivic(Car):
    make = "Honda"
    model = "Civic"

    def __init__(self, year):
        Car.__init__(self, year, HondaCivic.make, HondaCivic.model)
        self.year = year

    @property
    def year(self):
        return self._year

    @year.setter
    def year(self, year):
        self._year = year

ram = DodgeRam(2016)
print(ram)

civic1 = HondaCivic(2007)
print (civic1)

civic2 = HondaCivic(1999)
print (civic2)

输出 - 这是我感到困惑的地方。是什么导致这样的输出而不是直接错误?

< 0x000001F04AB1A848 处的.DodgeRam 对象>

< 0x000001F04AAA73C8 处的主要.HondaCivic 对象>

< 0x000001F04AAA7DC8 处的主要.HondaCivic 对象>

预期产出 -

2016 道奇公羊

2007 本田思域

2000 本田思域

标签: python-3.x

解决方案


欢迎,汤先生,堆栈溢出和 Python!

获得您想要的打印的简单答案(如果我理解正确的话)是覆盖 Python 的str方法。我在下面展示了一个示例。另外,我做了一些代码清理,希望对您有所帮助。

请注意,在 Python 中,除非您明确需要中断它们(如 year),否则您不会分配属性(setter/getter)。在其他语言中您可以使用(Java、C#),但不是 Python。

class Vehicle(object):
    def __init__(self, make: str, model: str, year: int = 2000):
        self.make = make
        self.model = model
        self.year = year

    @property
    def year(self):
        return self._year

    @year.setter
    def year(self, year):
        if year < 1999 or year > 2019:
            raise ValueError
        self._year = year

    def __str__(self):
        return f"{self.year} {self.make} {self.model}"


class Truck(Vehicle):
    def __init__(self, make, model, year):
        super().__init__(make, model, year)


class Car(Vehicle):
    def __init__(self, make, model, year):
        super().__init__(make, model, year)


class DodgeRam(Truck):
    def __init__(self, year):
        super().__init__("Dodge", "Ram", year)


class HondaCivic(Car):
    def __init__(self, year):
        super().__init__("Honda", "Civic", year)


if __name__ == '__main__':

    ram = DodgeRam(2016)
    print(ram)

    civic1 = HondaCivic(2007)
    print(civic1)

    civic2 = HondaCivic(1999)
    print(civic2)

推荐阅读