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)
输出 - 这是我感到困惑的地方。是什么导致这样的输出而不是直接错误?
< 0x000001F04AB1A848 处的主.DodgeRam 对象>
< 0x000001F04AAA73C8 处的主要.HondaCivic 对象>
< 0x000001F04AAA7DC8 处的主要.HondaCivic 对象>
预期产出 -
2016 道奇公羊
2007 本田思域
2000 本田思域
解决方案
欢迎,汤先生,堆栈溢出和 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)
推荐阅读
- html - CSS Clip-path 在多路径形状中无法按预期工作
- mule - JMX 连接到本地运行的 Mule 4 项目
- web-scraping - Metascraper 合并数据
- python - “游戏功能”中的pygame帮助循环值不增加也不减少
- save - 带有图像和背景视频的 Konva 加载阶段
- c++ - 在 Visual Studio 平台上使用 OpenCV C++ 时播放视频时出错
- javascript - 从已经反应的消息中删除特定的表情符号
- python - 如何从 Django 模型类中获取 content_type?
- azure - AAD B2C IEF:如何通过成本策略将错误代码和消息从 REST API 传递到应用程序?
- string - 您如何验证 TCL 中的文件路径?