【发布时间】:2016-02-04 22:16:20
【问题描述】:
假设我有不同的类提供对不同子系统的访问但具有通用接口。它们都提供相同的方法集,但每个类以不同的方式实现它们(想想使用 foo.write() 写入文件或通过套接字发送数据等)
由于接口相同,我想创建一个能够选择正确类但仅基于构造函数/初始化器参数的类。
在代码上,它看起来像
class Foo(object):
def who_am_i(self):
print "Foo"
class Bar(object):
def who_am_i(self):
print "Bar"
# Class that decides which one to use and adds some methods that are common to both
class SomeClass(Foo, Bar):
def __init__(self, use_foo):
# How inherit methods from Foo -OR- Bar?
在给定__init__ 和/或__new__ 参数的情况下,SomeClass 如何从Foo 继承方法或 Bar?
目标应该是这样的
>>> some_object = SomeClass(use_foo=True)
>>> some_object.who_am_i()
Foo
>>> another_object = SomeClass(use_foo=False)
>>> another_object.who_am_i()
Bar
是否有一些干净的“pythonic”方式来实现这一点?我不想使用函数来动态定义SomeClass,但我没有找到其他方法来做到这一点。
谢谢!
【问题讨论】:
-
这听起来像是组合而不是继承的情况,或者可能只是一个吐出
Foo或Bar的工厂函数。 -
SomeClass实例是否总是使用来自Foo的方法,或者总是使用来自Bar的方法,正如在初始化时配置的那样,或者它可能会因调用而异?用这样一个模糊的例子很难解决这个问题,但多重继承似乎不太可能是正确的方法。 -
@jonrsharpe 创建对象后,它将始终使用
Foo或Bar -
@AndréSouto 那么你为什么不根据实例化哪个类而不是调用哪个超类方法来解决这个问题?
标签: python inheritance subclass dynamic-programming subclassing