【发布时间】:2012-08-18 18:10:48
【问题描述】:
我有一个 Python 系统,由大约 9-10 个类组成,所有类都实现了大部分的胖鸭类型接口,并且可以被大量模块互换使用。我正在尝试将类重构为核心、显式(即 ABC)接口和外围功能,遵循职责分离,但为了做到这一点,我需要能够判断消费者模块何时调用核心之外的方法界面。
假设我有一个带有抽象方法的 ABC:
from abc import ABCMeta, abstractmethod
class MyABC:
__metaclass__ = ABCMeta
@abstractmethod
def foo(self):
pass
我还有一个实现这些抽象方法以及其他方法的类:
class MyClass(MyABC):
def foo(self):
pass
def bar(self):
pass
instance = MyClass()
>>> isinstance(instance, MyABC)
True
如何确保当我将 instance 传递给方法 do_something 时,它仅使用属于 MyABC 的方法(在本例中为 foo)而不是任何方法其他方法(bar)?在静态类型语言(例如 C++)中,我可以传递 do_something ABC 类型的指针; Python 中是否有某种包装器可以类似地限制方法访问?
【问题讨论】:
标签: python interface abstract-class