今天用python3的request写爬虫的时候遇到这个问题 查了很多,都没用,最后找到自己的解决办法 因为python3是bytes-like的,所以我们需要用split的话只能把它转为str # bytes object b = b"example"…
September 16, 2021
python中__str__() 函数的用法, Python __str__() 用法
__str__( )函数和__init__( )函数一样,都是python中的特殊函数,一般来说,打印对象会返回对象的地址,而地址信息通常对我们没有什么用,通过__str__( )函数可以打印对象的属性信息,方便我们调试代码。

定义 __str__() 方法:
class Cat: """定义一个猫类""" def __init__(self, new_name, new_age): """在创建完对象之后 会自动调用, 它完成对象的初始化的功能""" # self.name = "汤姆" # self.age = 20 self.name = new_name self.age = new_age # 它是一个对象中的属性,在对象中存储,即只要这个对象还存在,那么这个变量就可以使用 # num = 100 # 它是一个局部变量,当这个函数执行完之后,这个变量的空间就没有了,因此其他方法不能使用这个变量 def __str__(self): """返回一个对象的描述信息""" # print(num) return "名字是:%s , 年龄是:%d" % (self.name, self.age) def eat(self): print("%s在吃鱼...." % self.name) def drink(self): print("%s在喝可乐..." % self.name) def introduce(self): # print("名字是:%s, 年龄是:%d" % (汤姆的名字, 汤姆的年龄)) # print("名字是:%s, 年龄是:%d" % (tom.name, tom.age)) print("名字是:%s, 年龄是:%d" % (self.name, self.age)) # 创建了一个对象 tom = Cat("汤姆", 30) print(tom)
总结:
- 在python中方法名如果是
__xxxx__()
的,那么就有特殊的功能,因此叫做“魔法”方法 - 当使用print输出对象的时候,只要自己定义了
__str__(self)
方法,那么就会打印从在这个方法中return的数据 __str__
方法需要返回一个字符串,当做这个对象的描写
__str__
方法的必要性:
Python 中的__str__
方法将类对象表示为字符串——它可以用于类。该__str__
方法应以易于阅读的方式定义并输出该类的所有成员。当需要检查类的成员时,此方法也用作调试工具。
__str__
当在对象上调用以下函数并返回字符串时,将调用该方法:
- 打印()
- 字符串()
如果我们还没有定义__str__
,那么它将调用该__repr__
方法。该__repr__
方法默认返回一个描述对象指针的字符串(如果程序员没有定义它)。
如何调用__str__
方法
1. 默认实现
class MyClass: x = 0 y = "" def __init__(self, anyNumber, anyString): self.x = anyNumber self.y = anyString myObject = MyClass(12345, "Hello") print(myObject.__str__()) print(myObject.__repr__()) print(myObject)
Output 1.01s <__main__.MyClass object at 0x7fe3e08551f0> <__main__.MyClass object at 0x7fe3e08551f0> <__main__.MyClass object at 0x7fe3e08551f0>
上面的代码显示了一个既__str__
没有__repr__
定义也没有定义的示例。调用__str__
调用默认__repr__
方法,它们都给出相同的输出,即我们对象的指针。
2. 自定义__str__
方法
class MyClass: x = 0 y = "" def __init__(self, anyNumber, anyString): self.x = anyNumber self.y = anyString def __str__ (self): return 'MyClass(x=' + str(self.x) + ' ,y=' + self.y + ')' myObject = MyClass(12345, "Hello") print(myObject.__str__()) print(myObject) print(str(myObject)) print(myObject.__repr__())
Output 1.11s MyClass(x=12345 ,y=Hello) MyClass(x=12345 ,y=Hello) MyClass(x=12345 ,y=Hello) <__main__.MyClass object at 0x7f140a10f1f0>
上面的代码显示了定义__str__
方法后的输出。当__str__
, print()
, 或str()
被调用时,您将获得定义的输出。请注意,__repr__
输出保持不变。
3. __repr__
方法只定义
class MyClass: x = 0 y = "" def __init__(self, anyNumber, anyString): self.x = anyNumber self.y = anyString def __repr__ (self): return 'MyClass(x=' + str(self.x) + ' ,y=' + self.y + ')' myObject = MyClass(12345, "Hello") print(myObject.__str__()) print(myObject) print(str(myObject)) print(myObject.__repr__())
Output 0.85s MyClass(x=12345 ,y=Hello) MyClass(x=12345 ,y=Hello) MyClass(x=12345 ,y=Hello) MyClass(x=12345 ,y=Hello)
在第一个示例中,我们看到当__str__
未定义时,它会自动调用该__repr__
方法。因此,所有的输出端的功能- __str__
,str()
和__repr__
-是相同的。此外,该__repr__
方法不一定需要返回字符串。如果它不返回字符串,则print()
语句将抛出错误。
本文:python中__str__() 函数的用法, Python __str__() 用法