结论: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 最推荐的接口写法


Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐