python-08-07-抽象类抽象方法.md

接口

当多个类都有同样的方法,此时可以把相同的方法提练出来放在父类,但对继承父类的子类作约束就要用到接口了。

下面来段伪代码,在其它语言中普遍使用的语法,不适于python,这里主要学习其思想

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
interface IFoo():  # 这个叫IFoo接口,约束实现该接口的类必须实现定义的方法
def exec(self):pass

class A(IFoo): # 这个叫实现了IFoo接口,接口中的方法必须在当前类实现
def exec(self):
return "A.exec"

class B(IFoo):
def exec(self):
return 'B.exec'

def f1(arg):
arg.exec()

obj = A()
print(f1.obj)

上面就是接口的概念或者用法,下面是用抽象类、抽象方法实现同样功能的原理伪代码

1
2
3
4
5
6
7
8
9
10
11
12
AbstractClass Foo():  抽象类,抽象方法(有继承的特性,也有约束的特性)
def abstractmethod():pass

class A(Foo):
def exec(self):
return 'A.exec'

def f1(self):
return "A.f1"

obj = A()
obj.exec()

那么如何用代码实现python抽象类、抽象方法呢?

要用到from abc import abstractmethod,ABCMeta

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from abc import abstractmethod,ABCMeta

class IFoo(metaclass=ABCMeta):
@abstractmethod
def exec(self):pass

def f1(self):
return "cloud implement really method"

class A(IFoo): # 当前类继承了抽象类,当前类必须实现抽象类中的所有抽象方法,其它方法可以不用定义且可以直接继承使用。
def exec(self):
return "really method"

obj = A()

print(obj.exec())
print(obj.f1())

好了, 这个接口或抽象类、抽象方法的学习完结。