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装饰器作为标准。

python中抽象类和抽象方法 python的抽象类_bc

注意:不能直接实例化抽象类!!!

示例程序:
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()

梦想还是要有的,万一实现了呢~~~

python中抽象类和抽象方法 python的抽象类_抽象类_02