在 Python 中打印一个类的对象
Print objects of a Class in Python
定义__str__()
打印类对象的方法。该__str__()
方法由str(object)
内置函数format()
和print()
函数调用,并返回对象的非正式字符串表示形式。
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def __str__(self): return f'Name: {self.name}' bobby = Employee('bobbyhadz', 500) # ✅ print object of class print(bobby) # 👉️ Name: bobbyhadz # ✅ print dictionary containing an object's attributes and values print(str(bobby.__dict__)) # 👉️ {'name': 'bobbyhadz', 'salary': 100}
我们定义了__str__()
能够打印类对象的方法。
_
_ str _ _ ()
方法由内置str(object)
函数format()
和print()
函数调用,并返回对象的非正式字符串表示形式。
str.format()
或print()
函数,都会使用方法的输出。 __str__()
如果需要打印对象的属性和值,请访问其__dict__
属性。
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def __str__(self): return f'Name: {self.name}' bobby = Employee('bobbyhadz', 500) print(str(bobby.__dict__)) # 👉️ {'name': 'bobbyhadz', 'salary': 100}
该__dict__
属性返回一个包含对象的属性和值的字典。
确保从该方法返回一个字符串__str__()
,否则
TypeError
会引发 a。
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def __str__(self): return self.salary # 👈️ returned int, but only strings allowed bobby = Employee('bobbyhadz', 500) # ⛔️ TypeError: __str__ returned non-string (type int) print(bobby)
要从__str__()
方法中返回员工的薪水,我们必须使用
str()
该类将值转换为字符串。
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def __str__(self): return str(self.salary) bobby = Employee('bobbyhadz', 500) print(bobby) # 👉️ 500
如果您在格式化字符串文字中或与该方法__str__()
一起使用该对象,则会调用该str.format()
方法。
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def __str__(self): return str(self.salary) bobby = Employee('bobbyhadz', 500) result = f'Salary: {bobby}' print(result) # 👉️ Salary: 500
该__str__()
方法应返回一个字符串,该字符串是对象的人类可读表示形式。
还有一种__repr__()
方法可以类似地使用。
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def __repr__(self): return self.name bobby = Employee('bobbyhadz', 500) print(bobby) # 👉️ bobbyhadz
_
_ repr _ _
方法由函数调用,通常repr()
用于获取字符串,该字符串可用于使用eval()
函数重建对象。
__str__()
定义方法,但已定义,则使用 的输出。 __repr__()
__repr__()
__str__()
说明和之间区别的一个好方法__repr__()
是使用datetime.now()
方法。
import datetime # 👇️ using __str__() print(datetime.datetime.now()) # 👉️ 2022-09-13 19:24:30.537917 # 👇️ using __repr__() # 👉️ datetime.datetime(2022, 9, 13, 19, 24, 30, 537942) print(repr(datetime.datetime.now())) result = eval('datetime.datetime(2022, 9, 13, 19, 24, 30, 537942)') print(result) # 👉️ 2022-09-13 19:24:30.537942
当我们使用这个print()
函数时,类__str__()
中的方法datetime
被调用并返回一个人类可读的日期和时间表示。
repr()
函数时,__repr__()
类的方法被调用并返回一个字符串,该字符串可用于重新创建对象的相同状态。我们将字符串传递给eval()
函数并创建了一个datetime
具有相同状态的对象。
请注意,__repr__()
以这种方式实施该方法并不总是必要或可能的。
大多数时候让__str__()
方法返回一个人类可读的字符串就足够了。