为了账号安全,请及时绑定邮箱和手机立即绑定

python 的特殊方法

python 的特殊方法

泛舟湖上清波郎朗 2019-04-13 08:37:20
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):"""Assumeseisanintegerreturneinself.valsdefremove(self,e):try:self.vals.remove(e)except:raiseValueError(str(e)+'notfound')`如果不注释掉__str__()>>>s>>>prints{3,4,5}如果注释掉__str__()>>>prints
查看完整描述

2 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

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

TA贡献1765条经验 获得超5个赞

__str__()用于将值转化为适于人阅读的形式
因为类本身是一个object,print一个类时,默认是显示他是一个对象如果在类中定义__str__(),他会去运行__str__()方法
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 405 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信