暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python类重载运算符init和str

原创 梯阅线条 2023-11-10
266

1 python类重载运算符init和str

1.1 类方法实现重载

python表达式和内置类型的运算流程是通过类的实例对象来控制的。

所以,自定义类也可以实现内置类型的运算符。

运算符重载:通过类方法实现内置类型的运算,比如:打印、加法、切片等。

python运算符重载让对象接口更一致,更具兼容性。

NO 知识点 描述
1 X 用双下化线命名类方法。每个方法对应一种内置运算符。
2 自动调用 对象使用内置运算符时,会自动调用对应的方法。
3 触发异常 类未实现内置运算符对应方法时,调用运算符会引发异常。

1.2 init()

python的__init__()为构造函数,对应内置运算符为小括号()。

所以,类调用小括号()创建实例对象时会自动调用__init__()构造方法。

用法

class 类名([父类1,...]): def __init__(self[,value]): [self.data = value] pass

描述

python通过构造函数__init__()重载小括号的调用,完成实例对象的初始化。

NO 场景 类创建实例对象时
1 类有init,父类有init 先自动调用本类__init__()方法
2 类有init,父类无init 先自动调用本类__init__()方法
3 类无init,父类有init 先自动调用父类__init__()方法
4 类无init,父类无init 无任何操作,直接创建实例对象
5 创建实例对象传参数 根据__init__()方法传参数

文件

E**:\documents\F盘\testclass.**py

class MyClassA: def setData(self,value): self.data = value def display(self): print('display.self.data={}={}'.format(self.data,self)) class MyClassB(MyClassA): def __init__(self,value): print('{}调用MyClassB.__init__'.format(value)) self.data = value class MyClassC(MyClassB): def __init__(self,value): print('{}调用MyClassC.__init__'.format(value)) self.data = value class MyClassD(MyClassC): pass class MyClassE(MyClassA): pass if __name__ == '__main__': # 无init,直接创建实例 a1 = MyClassA() a1.setData('a1')#未使用init,实例对象后额外设置data a1.display() try: #__init__有入参,创建实例对象必传 MyClassB() except Exception as e: print('MyClassB():{}'.format(e)) # 类有init父类无init,自动调用本类init,根据init传参数 b1 = MyClassB('b1')#使用init,在创建实例对象时自动设置data,完成对象初始化 b1.display() # 类有init父类有init,自动调用本类init c1 = MyClassC('c1') # 类无init父类有init,自动调用父类init d1 = MyClassD('d1') # 类无init父类无init,直接创建实例 e1 = MyClassE()

示例

# 打开cmd,执行下面示例 E:\documents\F盘>python testclass.py display.self.data=a1=<__main__.MyClassA object at 0x010EADD0> MyClassB():__init__() missing 1 required positional argument: 'value' b1调用MyClassB.__init__ display.self.data=b1=<__main__.MyClassB object at 0x010EAD50> c1调用MyClassC.__init__ d1调用MyClassC.__init__

1.3 str()

用法

class 类名([父类1,...]): def __str__(self): return 返回值 pass

描述

(1) python的__str__()用于重载print()。

(2) str()需有返回值,且为字符串。

(3) str()重载后,调用print()时需传实例对象。

​ a) 实例对象赋值给self

​ b) 打印__str__()返回值

(4) 重载__str__()不用额外编写和调用特殊的打印方法。只需调用print()即可。

文件

E**:\documents\F盘\testclass.**py

class MyClassA(): def __init__(self,name,age): self.name = name self.age = age class MyClassB(MyClassA): def __str__(self): return '姓名:{},年龄:{}'.format(self.name,self.age) if __name__ == '__main__': a1 = MyClassA('tyxt','16') print(a1)#未重载__str__时,默认打印 b1 = MyClassB('梯阅线条','18') print(b1)#重载__str__后,调用类的__str__方法

示例

# 打开cmd,执行下面示例 E:\documents\F盘>python testclass.py <__main__.MyClassA object at 0x01538A30> 姓名:梯阅线条,年龄:18

2 END

本文首发微信公众号:梯阅线条

更多内容参考python知识分享或软件测试开发目录。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论