python 的特殊方法

python中类似__init__()__str__()这样的特殊方法,其内在逻辑是怎样的?为什么要定义这样的特殊方法:
1、比如定义一个新类,如果不写__init__()是否意味着该类会隐式的调用基类的__init__(),或者说该类就无法进行实例化?
2、在新类中定义的特殊方法比如__init__()等,是否实质上就是对基类对应的特殊方法进行重写?
3、__str__()函数同str()函数有什么联系和区别?
4、下例print函数在有无__str__()下输出的结果完全不一样,那么print 函数和__str__()以及str()的关系是怎样的?

class intSet(object):

def __init__(self):
    self.vals = []

def __str__(self):
    self.vals.sort()
    return '{' + ','.join([str(e) for e in self.vals]) + '}'
    
def num(self):
    return len(self.vals)
    
def insert(self, e):
    if not e in self.vals:
        self.vals.append(e)

def member(self, e):
    """Assumes e is an integer
    return e in self.vals

def remove(self, e):
    try:
        self.vals.remove(e)
    except:
        raise ValueError(str(e) + ' not found')

`

如果不注释掉__str__()

>>> s
<__main__.intSet object at 0x000000000A7E3518>
>>> print s
{3,4,5}

如果注释掉__str__()
>>> print s
<__main__.intSet object at 0x000000000A7E35F8>

阅读 3.4k
2 个回答
  • 基类的__init__()要显式调用

  • 是重写,python实现多态的方法,可以通过super()方法来调用基类中的方法

  • 具体是怎么样,不清楚,我猜str()方法应该会调用参数的__str__()方法,类似的还有len()next()

  • print是会将参数转成str类型的,默认实现是对象的地址

__str__() 用于将值转化为适于人阅读的形式

因为类本身是一个objectprint一个类时,默认是显示他是一个对象
如果在类中定义__str__(),他会去运行__str__()方法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进