我有一个class A
,它实现了方法x()
和y()
,但我也有一个class B
,它实现了方法z()
。假设有一个AbstractA
基类。如何检测class A
上未实现的任何调用,例如z()
并转发给class B
?请注意,由于框架问题,我不能让A
从B
继承,即,
from abc import ABC, abstractmethod
class AbstractA(ABC):
# some magic for catching unimplemented method calls e.g. z
# and forward them to B's. Here I have access to instances of
# B e.g. context.b.z()
@abstractmethod
def x():
pass
@abstractmethod
def y():
pass
class A(AbstractA):
def __init__(self):
super().__init__()
def x():
print('running x()')
def y():
print('running y()')
class B:
def __init__(some plumbing args):
super().__init__(some plumbing args)
def z():
print('running z()')
a = A()
a.x()
a.y()
a.z()
为了给这个用例给予一点上下文,我有一个多层体系结构,其中有一个数据访问层(DAL),然后是一个服务应用层(SAL)。DAL是负责 Package 所有数据库访问用例的DAO的集合。SAL构建在DAL之上,并混搭了DAL的数据和业务应用程序逻辑。
例如,PersonDao
实现和PersonService
实现。PersonService
将调用PersonDao
来构建业务逻辑API,但有时客户端代码可能会请求PersonService
通过id查找人,这在PersonDao
中直接实现。因此,与其为每个DAO方法显式地实现一个直通服务方法,不如在PersonService
的抽象基础级别上自动化这个直通或委托,这样如果您执行person_service.find_by_id(3)
,它将直接转到PersonDao#find_by_id(id)
,从而有效地使服务实现成为底层DAO的门面。
1条答案
按热度按时间jgovgodb1#
仅在
class B
中获取函数名。将函数绑定到class A
。class A
中的值由z()
显示。仅在
class B
中的值也由z()
显示。