Python—为什么调用str时需要返回某些内容?我在_str中有打印功能__

Python—为什么调用str时需要返回某些内容?我在_str中有打印功能__,python,class,python-2.7,return,Python,Class,Python 2.7,Return,我正在用python构建一个简单的类。我已经定义了我自己的\uuuu str\uuu方法,当我在类的实例上调用print时,该方法应该可以很好地工作。当我创建该类的实例并对其调用print时,我得到一个错误: TypeError: __str__ returned non-string (type NoneType) 我理解这个错误,它告诉我函数没有返回任何东西(它返回了None) 正如您所看到的,我的\uuuu str\uuu函数具有我想要的所有打印语句。我不需要它归还任何东西。这是我想要的

我正在用python构建一个简单的类。我已经定义了我自己的
\uuuu str\uuu
方法,当我在类的实例上调用print时,该方法应该可以很好地工作。当我创建该类的实例并对其调用
print
时,我得到一个错误:

TypeError: __str__ returned non-string (type NoneType)
我理解这个错误,它告诉我函数没有返回任何东西(它返回了
None

正如您所看到的,我的
\uuuu str\uuu
函数具有我想要的所有打印语句。我不需要它归还任何东西。这是我想要的输出

Vehicle Type: SUV
Make: BMW
Model: X5
Year: 2003
Miles: 12030
如何获得此输出? 我尝试过这样做以避免打印错误,但错误仍然出现:

def __str__(self):
    try:
        print('Vehicle Type: ' + str(self.typ))
        print('Make: ' + str(self.make))
        print('Model: ' + str(self.model))
        print('Year: ' + str(self.year))
        print('Miles: ' + str(self.miles))
    except:
        pass

您必须生成一个大字符串并使函数返回它:

def __str__(self):
    result = 'Vehicle Type: ' + str(self.typ) # just the start, append everything else to this string
    return result

str方法用于创建要打印的字符串,而不是打印本身。这是在调用str(object)时隐式完成的。

您必须生成一个大字符串并使函数返回它:

def __str__(self):
    result = 'Vehicle Type: ' + str(self.typ) # just the start, append everything else to this string
    return result

str方法用于创建要打印的字符串,而不是打印本身。这是在调用str(object)时隐式完成的。

,因为这就是要重写的
\uuuuuuuuuuuuuuuu
的定义方式。如果不希望返回字符串,请使用其他方法。

,因为这就是要覆盖的
\uuuu str\uuuu
的定义方式。如果不希望返回字符串,请使用其他方法。

根据文档

由str()内置函数和print语句调用 计算对象的“非正式”字符串表示形式。这 与repr()的不同之处在于它不必是有效的Python 表达式:可以使用更方便或简洁的表示 相反返回值必须是字符串对象。

因此,
\uuu str\uuu
返回的值必须是字符串,在您的情况下,您不返回任何内容,因此默认情况下Python返回
None

只需更改
\uu str\uu
函数即可获得所需的输出,如下所示

def __str__(self):
    return "Vehicle Type: {}\nMake: {}\nModel: {}\nYear: {}\nMiles: {}" \
        .format(self.typ, self.make, self.model, self.year, self.miles)
根据文件,

由str()内置函数和print语句调用 计算对象的“非正式”字符串表示形式。这 与repr()的不同之处在于它不必是有效的Python 表达式:可以使用更方便或简洁的表示 相反返回值必须是字符串对象。

因此,
\uuu str\uuu
返回的值必须是字符串,在您的情况下,您不返回任何内容,因此默认情况下Python返回
None

只需更改
\uu str\uu
函数即可获得所需的输出,如下所示

def __str__(self):
    return "Vehicle Type: {}\nMake: {}\nModel: {}\nYear: {}\nMiles: {}" \
        .format(self.typ, self.make, self.model, self.year, self.miles)
方法通常返回对象的可读字符串表示形式。您应该在
\uuuu str\uuuu
方法中生成一个字符串,然后打印它:

def __str__(self):
    return "Vehicle type: {self.typ}\nMake: {self.make}\nModel: {self.model}\nYear: {self.year}\nMiles: {self.miles}".format(self=self)

bmw = Car('SUV', 'BMW', 'X5', 'silver', 2003, 12030)
print str(bmw)
方法通常返回对象的可读字符串表示形式。您应该在
\uuuu str\uuuu
方法中生成一个字符串,然后打印它:

def __str__(self):
    return "Vehicle type: {self.typ}\nMake: {self.make}\nModel: {self.model}\nYear: {self.year}\nMiles: {self.miles}".format(self=self)

bmw = Car('SUV', 'BMW', 'X5', 'silver', 2003, 12030)
print str(bmw)
您必须从
\uuuuu str\uuuuu
返回字符串,因为您正在重写自定义类的基类中的方法,因此您需要尊重它的约定、签名或任何您想要调用的约束,该约束规定
\uuuu str\uuuuuu
不接受任何参数并返回字符串对象

除了这个简单的面向对象的概念外,如果你在吹嘘自己拥有这个或那个需要从任何地方返回任何东西之前,先了解一下自己,那就太好了。还有另一个基本的编程概念,你应该开始熟悉:模型逻辑与I/O的分离。永远,永远,使用
print
语句污染某些模型类:让它保存与该数据正确相关的数据和行为,并允许用户界面任务,例如在屏幕上打印内容,由应用程序中的其他实体执行。

您必须从
\uuuu str\uuuu
返回一个字符串,因为您正在重写自定义类基类中的方法,因此您需要尊重它的约定或签名,或者任何您想要调用的约束,该约束规定
\uu str\uu
不接受任何参数并返回字符串对象


除了这个简单的面向对象的概念外,如果你在吹嘘自己拥有这个或那个需要从任何地方返回任何东西之前,先了解一下自己,那就太好了。还有另一个基本的编程概念,你应该开始熟悉:模型逻辑与I/O的分离。永远,永远,使用
print
语句污染某些模型类:让它保存与该数据正确相关的数据和行为,并允许应用程序中的其他实体执行用户界面任务,例如在屏幕上打印某些内容。

虽然这里给出的许多答案都是正确的,但这正是所需要的。 记住,Slybookz没有你的支持

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

虽然这里给出的许多答案都是正确的,但这正是我们所需要的。 记住,Slybookz没有你的支持

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

\uuuu str\uuuu
用于
str
用于获取文本表示。您并不总是希望打印此表示形式,而是希望它返回此表示形式,以便可以对其执行其他操作:将其嵌入其他文本中,将其写入文件(无需重定向stdout),对其执行字符串操作,将其存储在数据结构中以供以后使用,等等。并且应该打印它,这与
打印一样简单(车辆)
因为
print
调用
str
\uuu str\uuuu
用于
str
用于获取文本表示。您并不总是想打印此表示,您希望它返回此表示,以便可以执行其他操作