如何将(继承)父级转换为子级?

时间:2012-04-05 14:20:36

标签: python class inheritance

我想知道如何将某些函数返回的父对象转换为子类。

class A(object):
    def __init__():
        pass

class B(A):
    def functionIneed():
        pass

i = module.getObject()# i will get object that is class A
j = B(i)# this will return exception
j.functionIneed()

我无法更改A类。如果可以的话,我会将classIneed实现到A类,但由于代码结构不可能。 感谢

5 个答案:

答案 0 :(得分:13)

Python不支持“强制转换”。您需要编写B.__init__(),以便A可以正确初始化自己。

答案 1 :(得分:4)

我非常怀疑,不,有信心,你的程序设计有一些可怕的错误,它要求你这样做。在Python中,与Java不同,很少有问题需要类来解决。如果您需要一个功能,只需定义它:

def function_i_need(a):
     """parameter a: an instance of A"""
     pass # do something with 'a'

但是,如果我不能阻止您将函数作为类的方法,则可以通过设置其__class__属性来更改实例的类:

>>> class A(object):
...     def __init__(self):
...         pass
... 
>>> class B(A):
...     def functionIneed(self):
...         print 'functionIneed'
... 
>>> a = A()
>>> a.functionIneed()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'A' object has no attribute 'functionIneed'
>>> a.__class__ = B
>>> a.functionIneed()
functionIneed

只要B没有__init__方法,这就行了,因为很明显,__init__永远不会被调用。

答案 2 :(得分:2)

你说你想要实现这样的东西:

class B(A):
    def functionIneed():
        pass

但是你真正想做的事情更像是这样(除非你打算首先制定classstatic方法):

class B(A):
    def functionIneed(self):
        pass

然后你可以致电B.functionIneed(instance_of_A)。 (这是必须pass self explicitly to methods.

的优势之一

答案 3 :(得分:1)

您未正确定义班级。 应该是这样的:

class A(object):
    def __init__(self):
        pass

class B(A):
    def __init__(self):
        super(B,self).__init__()

    def functionIneed(self):
        pass

然后你可以

j=B()
j.fuctionIneed()

按预期

你忘了参考ins

答案 4 :(得分:0)

怎么样:

i = module.getObject() # i will get object that is class A
try:
    i.functionIneed()
except AttributeError:
    # handle case when u have a bad object

阅读鸭子打字。