python:如何从动态继承的类继承?

时间:2017-09-28 15:37:59

标签: python python-2.7 inheritance

我正在编写一个python(python 2.7)程序。 我想创建一个继承自动态继承自另一个类的类的类。 可以这样做吗?

例如:

class A(Object):
    def print_me():
        print "A"

class B(Object):
    def print_me():
        print "B"

class son(<inherits from A or B dynamically, depending on the input>):
    pass

class grand_son(son):
    pass

我想要的是以下代码:

 grand_son("A").print_me()

将打印:

 >> A

和以下代码:

 grand_son("B").print_me()

将打印:

 >> B

可以吗?

感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用type()的三个参数形式来动态创建一个类。

这是一个互动演示:

>>> class A(object):
...   def print_me(self):
...     print "A"
... 
>>> class B(object):
...   def print_me(self):
...     print "B"
... 
>>> def getclass(name):
...   return {"A":A, "B":B}[name]
... 
>>> def getson(parent):
...   return type("son", (getclass(parent),), {})
... 
>>> son = getson("A")
>>> son().print_me()
A
>>> son = getson("B")
>>> son().print_me()
B

使用此功能,您可以定义grand_son功能:

>>> def grand_son(grandparent):
...   return type("grand_son", (getson(grandparent),), {})
... 
>>> grand_son("A")().print_me()
A
>>> grand_son("B")().print_me()
B
>>>