Python 有没有接口?
·
结论:Python 没有像 Java/C# 那样专门的 interface 关键字,但完全可以实现「接口」的功能。
最直白、面试必对的话讲清楚:
1. 官方回答
Python 没有专门的 interface 语法,
但 Python 用 抽象类(ABC + @abstractmethod)替代接口。
2. Java 接口 vs Python 接口(等价写法)
Java 接口:
interface Pay {
void pay();
}
Python 等价接口:
from abc import ABC, abstractmethod
class Pay(ABC): # 这就是 Python 的接口
@abstractmethod
def pay(self):
pass
特点完全一样:
- 只定义方法规范,不实现
- 子类必须全部实现,否则不能实例化
- 用于统一接口、多态
3. Python 实现「多接口」(Java 最核心功能)
Java 可以 implements A,B,C
Python 直接多继承抽象类 = 实现多个接口:
from abc import ABC, abstractmethod
class Pay(ABC):
@abstractmethod
def pay(self): pass
class Refund(ABC):
@abstractmethod
def refund(self): pass
# 同时实现两个“接口”
class AliPay(Pay, Refund):
def pay(self):
print("支付宝支付")
def refund(self):
print("支付宝退款")
✅ 这就是 Python 的多接口实现。
4. 更 Pythonic 的方式:协议(Protocol)
Python 3.8+ 提供了 typing.Protocol,更轻量、更像接口,不需要继承 ABC!
from typing import Protocol
class Payable(Protocol):
def pay(self) -> None: ... # 定义接口规范
使用时不需要继承,只要类有 pay() 方法,就自动符合接口(鸭子类型):
class WechatPay:
def pay(self):
print("微信支付")
# 自动认为 WechatPay 实现了 Payable 接口
def do_pay(p: Payable):
p.pay()
do_pay(WechatPay()) # ✅ 完全正常
这是现代 Python 最推荐的接口写法。
更多推荐


所有评论(0)