python 抽象类
程序员文章站
2022-05-22 11:14:11
...
python 抽象类
从网上找了好多资料,对python抽象类的总结都比较乱,所以自己整理了一篇供大家学习交流
在我们了解抽象类的时候先了解一下什么是接口
1.在python中并没有interface这个关键字来声明这是个接口,如果非要模仿接口的概念就用到了第三方模块,比如:abs模块。
2、接口就是只定义了一些方法,而没有实现。【(这些方法被称为抽象方法),大家自行脑补,在一个方法中直接写了一个pass就是没有实现任何功能的方法,就叫做抽象方法】
3.这些功能需要被另一个类(B)继承,由B类实现某个功能,或者全部功能。
比如:我们常说的一些外部API的接口,只是调用,功能由调用的接口实现。
实例程序:
class Human: #定义一个接口
def eat(self): #抽象方法,下同
pass
def sleep(self):
pass
def play(self):
pass
#调用接口
class People(Human): #我们继承Human接口,通过这个类来实现功能
def eat(self):
print("吃饭")
def sleep(self):
print("睡觉")
def play(self):
print("打豆豆")
#实例对象
ren = People()
ren.eat()
#此处仅代表个人观点,这个接口,有点像继承,然后方法重写,但是父类就是没有功能。
进入重点 抽象方法
1.抽象类给我们的第一感觉就是,八九年代的抽象派的感觉,生涩难懂,其实不然,我们也就会发现这就是一个概念。 2.抽象类,就像是类和接口的混合体,具有接口的特性,在python中利用第三方abc模块,实现抽象类。
3抽象方法不存在重写的问题,却有实现的问题
4含有抽象方法的类一定是抽象类,但是抽象类不一定含有抽象方法,此时也没有任何意义了。
5.在python中接口(抽象类)常用于协同工作。
注意:在python中,我们不以有无执行体来区分是否是抽象类,而是根据是否有@abc.abstractmethod装饰器作为标准。
注意:不能直接实例化抽象类!!!
示例程序:
import abc #导入abc模块
class InMa(metaclass=abc.ABCMeta): #定义抽象方法
@abc.abstractmethod #定义抽象方法
def login(self):
pass
@abc.abstractmethod
def zhuce(self):
pass
class Login(InMa): #继承抽象类
def __inti__(self,name,pwd):
self.name = name
self.password = pwd
def login(self): #实现抽象方法功能
if self.name == "qq" and self.password == "111":
print("恭喜登录成功")
else:
print("登录失败")
class Zc(Login):
def __init__(self,name,pwd):
self.name = name
self.password = pwd
def zhuce(self):
print("恭喜注册成功")
print("username:",self.name)
print("password:",self.password)
#实例对象
ren = Zc("Jaue","qqq")
ren.zhuce()