【问题标题】:class and defining __str__类和定义 __str__
【发布时间】:2021-03-22 15:08:35
【问题描述】:

这是练习:

CarRecord编写特殊方法__str__()

带输入的示例输出:2009 'ABC321'

Year: 2009, VIN: ABC321

以下代码是我想出的,但我收到了一个错误:

TYPEERROR: __str__ returned non-string

我不知道我哪里出错了。

class CarRecord:
    def __init__(self):
        self.year_made = 0
        self.car_vin = ''


    def __str__(self):
        return "Year:", (my_car.year_made), "VIN:", (my_car.car_vin)

   

my_car = CarRecord()
my_car.year_made = int(input())
my_car.car_vin = input()

print(my_car)

【问题讨论】:

  • 您没有从 __str()__() 方法返回字符串。
  • return "Year:" + my_car.year_made + "VIN:" + my_car.car_vin 或者使用 fstring 获取 str 格式
  • 使用 f 字符串:return f"Year: {self.year_made} VIN: {self.car_vin}"
  • return 不像print(),用逗号分隔值构成一个元组,它不会将它们连接成一个字符串。
  • 当您执行 return "a", "b" 时,它与 return ("a", "b") 相同,即您返回一个包含 2 个字符串而不是一个字符串的元组(元组与列表非常相似)。将其更改为return "Year: " + my_car.year_made + " VIN: " + my_car.car_vin

标签: python string class


【解决方案1】:

您正在使用所有这些逗号返回一个元组。您还应该在课堂内使用self,而不是my_car。试试这样:

    def __str__(self):
        return f"Year: {self.year_made}, VIN: {self.car_vin}"

字符串前面的f 告诉Python 用该代码的结果替换字符串内大括号中的任何代码。

【讨论】:

  • 做到了!非常感谢!我错过了 f,应该使用 {} 而不是 ()。
【解决方案2】:
class Car:
    def __init__(self):
        self.model_year = 0
        self.purchase_price = 0
        self.current_value = 0
        def print_info():
            print('Car Info') # It specifies a print_info class method but doesnt actually need to print anything useful.

    def calc_current_value(self, current_year):
        depreciation_rate = 0.15
        car_age = current_year - self.model_year
        self.current_value = round(self.purchase_price * (1 - depreciation_rate) ** car_age)
    
    
    def print_info(self):
       print("Car's information:")
       print("   Model year:", self.model_year)
       print("   Purchase price:", self.purchase_price)
       print("   Current value:", self.current_value)

if __name__ == "__main__":    
    year = int(input()) 
    price = int(input())
    current_year = int(input())
    
    my_car = Car()
    my_car.model_year = year
    my_car.purchase_price = price
    my_car.calc_current_value(current_year)
    my_car.print_info()

【讨论】:

  • 代码在附有解释时会更有帮助。 Stack Overflow 是关于学习的,而不是提供 sn-ps 来盲目复制和粘贴。请edit您的问题并解释它如何回答所提出的具体问题。见How to Answer
【解决方案3】:
def __str__(self):
       return "Year: {}, VIN: {}".format(self.year_made, self.car_vin)

这里的技巧是你从类的顶部提取值,因为它们稍后在代码中设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 2017-07-28
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多