在 Python 中打印一个类的对象

在 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__()方法返回一个人类可读的字符串就足够了。

发表评论