一、类的继承
(1)基于已有类(称为父类或基类)创建新类(称为子类或派生类)。格式:
class 子类名(基类名):
(2)子类只能继承父类的公有成员
(3)子类可重写父类的方法
如果子类没有重写__init__方法,则子类实例化时自动调用父类的__init__方法。
如果子类已重写__init__方法,则子类实例化时不调用父类的__init__方法。
(4)在子类中可通过“父类名.方法名()”调用父类的方法(需传递self参数)。
(5)可以同时继承多个父类创建子类。
二、类的多态
一个子类实例的数据类型既是子类,也是父类。如:
class Animal():
def run(self):print("Animal is running...")
class Cat(Animal):#根据父类Animal创建子类Cat
def run(self):print("Cat is running...")#重写父类的run方法
cat=Cat()#cat既是Cat数据类型,也是Animal数据类型。
三、运算符重载
可以通过运算符重载实现对象运算。常用运算符重载的方法有:
__add__(self,x):加法(self+x)。
__sub__(self,x):减法(self-x)。
__mul__(self,x):乘法(self*x)。
__truediv__(self,x):除法(self/x)。
__floordiv__(self,x):整除(self//x)。
__mod__(self,x):求余(self%x)。
__pow__(self,x):幂运算(self**x)。
注:以上重载方法对应的反向运算符只需以r开头即可。
例如,__radd__(self,x):加法(x+self)。
__lt__(self,x)、 __gt__(self,x):小于(self<x)、大于(self>x)。
__le__(self,x)、__ge__(self,x):小于等于(self<=x)、大于等于(self>=x)。
__eq__(self,x)、__ne__(self,x):等于(self==x)、不等于(self!=x)。
__contains__(self,x):成员关系测试(self in x)。
四、可迭代对象(Iterable)
(1)Python中经常使用for来对某个对象进行遍历,此时被遍历的这个对象就是可迭代对象。list、tuple、dict、set、str、生成器,都是可迭代对象。
(2)通过类创建可迭代对象
在类的定义中,定义了可以返回一个迭代器的__iter__方法,或者定义了可以支持下标索引的__getitem__方法,那么它就是一个可迭代对象。
示例:
class Geometricseries(): #可生成等比序列
def __init__(self,a,n,q): #a为首项、n为项数、q为公比
self.a=a
self.n=n
self.q=q
def __getitem__(self,k): #实现切片和索引
v=[self.a*self.q**i for i in range(self.n)]
return v[k]
x=Geometricseries(1,10,2)#创建首项为1、项数为10、公比为2的等比数列
print(sum(x[0::2])) #输出数列奇数项的和

