我有一个由大约9-10个类组成的Python系统,所有类都实现了大多数胖鸭式界面,并且可以通过大量模块交换使用。我试图在责任分离后将类重构为核心的显式(即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中是否有某种包装器可以类似地限制方法访问?