我在考虑是否应该使用继承或委托来实现一种包装类。我的问题是这样的:假设我有一个名为Python
的类。在
class Python:
def __init__(self):
...
def snake(self):
""" Make python snake through the forest"""
...
def sleep(self):
""" Let python sleep """
...
。。。还有更多的行为。现在,我有了一个需要Anaconda
的现有代码,它几乎类似于Python
,但略有不同:一些成员的名称和参数稍有不同,而其他成员则添加了新的功能。我真的想重用Python
中的代码。因此,我可以通过继承来实现:
当然我也可以打电话给Anaconda().sleep()
。但问题是:我需要使用一个PythonFactory
。在
class PythonFactory:
def makeSpecialPython(self):
""" Do a lot of complicated work to produce a special python"""
…
return python
我希望它生成一个Python
,然后我应该能够将它转换成Anaconda
:
myAnaconda = Anaconda(PythonFactory().makeSpecialPython())
在这种情况下,授权是可行的。(我不知道是否可以使用继承来完成此操作):
class Anaconda:
def __init__(self, python):
self.python = python
def wriggle(self):
self.python.wriggle()
def devourCrocodile(self, croc):
...
但有了授权,我不能调用Anaconda().sleep()
。在
所以,如果你还和我在一起,我的问题是:
A)在类似的情况下,我需要
我应该使用继承还是委托?(或者别的什么?)在
B)一个优雅的解决方案是使用委托加上一些特殊的方法来转发Anaconda
不响应其{
这在Python中很简单,只需定义
__getattr__
:请参见^{} 上的Python文档
相关问题 更多 >
编程相关推荐