python中__str__() 函数的用法, Python __str__() 用法

 

__str__( )函数和__init__( )函数一样,都是python中的特殊函数,一般来说,打印对象会返回对象的地址,而地址信息通常对我们没有什么用,通过__str__( )函数可以打印对象的属性信息,方便我们调试代码。

 

python中__str__() 函数的用法, Python __str__() 用法
python中__str__() 函数的用法, 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__() 用法

Leave a Reply