【发布时间】:2017-07-28 11:14:26
【问题描述】:
我想创建一个子类“sub()”,它可以继承对象“A(object)”或对象“B(object)”。
以下适用于此:
class A(object):
def __init__(self):
print "Class A was inherited"
class B(object):
def __init__(self):
print "Class B was inherited"
class sub(A if inh==A else B):
def __init__(self,inh):
if inh==A:
A.__init__(self)
else:
B.__init__(self)
但是,当我构造“sub()”时,“inh”不是定义的参数。我希望能够使用初始化“A(object)”或“B(object)”的参数“inh”构造我的“sub()”。
这样:
my_object = sub(inh = A)
会给我:
Class A was inherited
还有:
my_object = sub(inh = B)
会给我
Class B was inherited
我的问题是,如何将“inh”传递给构造函数“sub()”,以便它可以选择正确的对象来继承?
【问题讨论】:
-
你不能。继承是在创建类型时完成的,而不是在实例化它时完成的。但是,您可以动态创建一个新类。
-
为什么要这样做?闻起来像 XY problem。
-
为什么需要继承?你能代替作曲吗?
-
之所以要动态继承,是因为 A(object) 和 B(object) 有相同的功能(同名但返回结果不同的函数)。我没有为我的超类中的所有函数执行“if inh = A:...”,而是简单地覆盖了我的“sub()”调用的函数。对此更优雅的解决方案表示赞赏。
标签: python python-3.x class oop inheritance