定义的方法是`__str__`,为什么用在实例上时不用写双下划线了?str(bob)

来源:4-2 Python类的__str__ 和 __repr__方法

葡萄葡萄

2020-10-20 06:58

class Person(object):    
def __init__(self, name, gender):        
self.name = name        
self.gender = gender    
def __str__(self):        
return 'name: {}, gender: {}'.format(self.name, self.gender)
bob = Person('Bob', 'Male')
str(bob) # ==> 'name: Bob, gender: Male'

定义的方法是`__str__`,为什么用在实例上时不用写双下划线了?

写回答 关注

2回答

  • 不做实力派的型男不改昵称
    2021-01-17 19:22:50

    你这完全搞错了,__str__是object对象的内置函数,而str()是python全局的一个内置函数,这两个不是一个函数

    在使用     str(a)     时等价于    a.__str__()      ,即str方法会去调用对象的内置函数__str__.

    这里你可能会问,那为啥不写a.__str__(),而是写成str(a)。因为习惯规定双下划线的为私有级别,不建议直接调用,而且个人觉得写起来代码也不好看

  • weixin_慕斯3464934
    2020-10-28 21:36:14

    这没啥原理,创始人定的。他开头怎么定,后人跟着怎么走。就像‘’我爱你‘’为什么代表我爱你,而不是‘’去吃饭‘’代表我爱你,都是无解的。

Python3 进阶教程(新版)

学习函数式、模块和面向对象编程,掌握Python高级程序设计

41910 学习 · 236 问题

查看课程

相似问题