在python3类中格式化__str__的输出字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python3类中格式化__str__的输出字符串相关的知识,希望对你有一定的参考价值。
所以我刚刚完成了我的第一个Java学期,并试图将我们的一些项目转换为python代码。我们有一个PetRecord类需要有一个名字(str),年龄(双倍)和权重(double)。该项目需要为所有这些创建getter和setter,以及toString。
我找到了一个使用的示例__str__
方法,它允许python对象的属性仅通过print(object_name)
打印到屏幕上。我不确定为什么我的格式化不正常。如果有人可以启发我为什么扔它:
Traceback (most recent call last):
File "PetRecord.py", line 92, in <module>
print(TestPet)
File "PetRecord.py", line 49, in __str__
return('Name: {self.__name}
Age: {self.__age}
Weight:{self.__weight}').format(**self.__dict__) # this is printing literally
KeyError: 'self'
代码本身(更改了此帖子的行格式):
class PetRecord(object):
'''
All pets come with names, age and weight
'''
def __init__(self, name='No Name', age=-1.0,
weight=-1.0):
# data fields
self.__name = name
self.__age = age
self.__weight = weight
def __str__(self):
# toString()
return('Name: {self.__name}
Age: {self.__age}
Weight:{self.__weight}').format(
**self.__dict__) # this is printing literally
任何帮助都将非常感激。
答案
KeyError
的原因是self
没有传递给格式化字符串。
你有另外一个问题 - 单个你在实例属性名称前加上双下划线(使它们成为“私有”) - the actual names would be mangled - 这意味着,例如,你需要访问__name
作为self._PetRecord__name
:
def __str__(self):
return "Name: {self._PetRecord__name}
Age: {self._PetRecord__age}
Weight: {self._PetRecord__weight}".format(self=self)
请注意,在Python 3.6+中,您可以使用f-strings
:
def __str__(self):
return f"Name: {self._PetRecord__name}
Age: {self._PetRecord__age}
Weight: {self._PetRecord__weight}"
以上是关于在python3类中格式化__str__的输出字符串的主要内容,如果未能解决你的问题,请参考以下文章
python3 json数据格式的转换(dumps/loads的使用dict to str/str to dictjson字符串/字典的相互转换)