我有一个 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中是否有某种包装器可以类似地限制方法访问?