声明:本内容非盈利性质,也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站,会尽量附上原文链接,并鼓励大家看原文。侵删。
2.6 接口类
2.6.1 python中的接口类
python中的接口类同样要依靠abc模块实现。python中的接口类要满足以下特点:
- 抽象类不能被实例化,只能被继承;(其非抽象的子类可以实例化)
- 只包含接口(抽象方法),不包含其他方法及属性;
- 实现接口类的非抽象子类必须实现其所有的接口。
不同于java中是以语法区分接口类和抽象类的。python中接口类与抽象类的形式都是一样的,python中依靠约定区分接口类与抽象类,没有语法上的强制要求。
2.6.2 创建接口类及实现接口
接口类及实现接口在形式上与抽象类有其子类的方法重写一样。如下:
from abc import abstractmethod, ABCMeta
class Walk_animal(metaclass=ABCMeta):
@abstractmethod
def walk(self): # 这个抽象方法有方法体和返回值,但并不报错,说明python中是靠约定约束的,而不是靠语法约束的
print("")
return 5
class Swim_animal(metaclass=ABCMeta):
@abstractmethod
def swim(self): pass
class Fly_animal(metaclass=ABCMeta):
@abstractmethod
def fly(self): pass
class Tiger(Walk_animal, Swim_animal):
def walk(self):
print("四只脚跑")
def swim(self):
print("四只脚游")
class Swan(Walk_animal, Swim_animal, Fly_animal):
def walk(self):
print("两只脚跑")
def swim(self):
print("两只脚游")
def fly(self):
print("两只翅膀飞")
t = Tiger()
s = Swan()
t.walk()
s.fly()
2.6.3 python中的常量
Python语言因为变量无类型,所以也就不存在常量修饰符,其本身并未提供任何机制来进行常量的定义。
python程序一般通过约定俗成的变量名全大写的形式表示这是一个常量,然而这种方式并没有真正实现常量,其对应的值仍然可以被改变。后来python提供了新的方法实现常量:即通过自定义类实现常量。这要求符合“命名全部为大写”和“值一旦被绑定便不可再修改”这两个条件。因此我们只能通过自己定义类的方法来定义一个符合常量规则的类,使得该类定义的成员属性满足常量的属性。