python 的特殊方法

python中类似__init__()、__str__()这样的特殊方法,其内在逻辑是怎样的?为什么要定义这样的特殊方法:1、比如定义一个新类,如果不写__init__()是否意味着该类会隐式的调用基类的__init__(),或者说该类就无法进行实例化?2、在新类中定义的特殊方法比如__init__()等,是否实质上就是对基类对应的特殊方法进行重写?3、__str__()函数同str()函数有什么联系和区别?4、下例print函数在有无__str__()下输出的结果完全不一样,那么print函数和__str__()以及str()的关系是怎样的?
classintSet(object):
def__init__(self):
self.vals=[]
def__str__(self):
self.vals.sort()
return'{'+','.join([str(e)foreinself.vals])+'}'
defnum(self):
returnlen(self.vals)
definsert(self,e):
ifnoteinself.vals:
self.vals.append(e)
defmember(self,e):
"""Assumeseisaninteger
returneinself.vals
defremove(self,e):
try:
self.vals.remove(e)
except:
raiseValueError(str(e)+'notfound')
`
如果不注释掉__str__()
>>>s<__main__.intSetobjectat0x000000000A7E3518>>>>prints{3,4,5}
如果注释掉__str__()>>>prints<__main__.intSetobjectat0x000000000A7E35F8>
泛舟湖上清波郎朗
浏览 406回答 2
2回答

Cats萌萌

基类的__init__()要显式调用是重写,python实现多态的方法,可以通过super()方法来调用基类中的方法具体是怎么样,不清楚,我猜str()方法应该会调用参数的__str__()方法,类似的还有len()、next()等print是会将参数转成str类型的,默认实现是对象的地址

POPMUISE

__str__()用于将值转化为适于人阅读的形式因为类本身是一个object,print一个类时,默认是显示他是一个对象如果在类中定义__str__(),他会去运行__str__()方法
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript