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知识分享或软件测试开发目录。