这是我的代码。 我以为我做对了所有事情,这是我的不得已
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本田思域
答案 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)