我的输出打印不正确,我似乎无法理解为什么

时间:2020-02-02 01:18:43

标签: python-3.x

这是我的代码。 我以为我做对了所有事情,这是我的不得已

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)

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

<< strong>主要。位于0x000001F04AB1A848的DodgeRam对象>

<< strong>主要。位于0x000001F04AAA73C8的HondaCivic对象>

<< strong>主要。位于0x000001F04AAA7DC8的HondaCivic对象>

预期输出-

2016道奇公羊

2007年本田思域

2000本田思域

1 个答案:

答案 0 :(得分:1)

汤姆先生,欢迎您来堆栈溢出并使用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)