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

Python 如何将父类转换(继承)为子类?,python,class,inheritance,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。如

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

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。如果可以的话,我会将Functionined实现为类A,但由于代码的结构,这是不可能的。

Python不支持“强制转换”。您需要编写
B.\uuuu init\uuuuu()
,这样它就可以接受
A
并适当地初始化自己。

我强烈怀疑,不,我确信,您的程序设计中存在严重错误,需要您这样做。在Python中,与Java不同,很少有问题需要类来解决。如果您需要一个函数,只需定义它:

def function_i_need(a):
     """parameter a: an instance of A"""
     pass # do something with 'a'
但是,如果我不能阻止您将函数作为类的方法,您可以通过设置实例的
\uuuuu class\uuuu
属性来更改实例的类:

>>> 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
>>A类(对象):
...     定义初始化(自):
...         通过
... 
>>>B(A)类:
...     def功能化(自):
...         打印“函数化”
... 
>>>a=a()
>>>a.功能性()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:'A'对象没有'Functionined'属性
>>>a.。\uuuu类\uuuuu=B
>>>a.功能性()
功能

只要B没有
\uuuuuu init\uuuuu
方法,这将起作用,因为显然,
\uuuuuu init\uuuuu
将永远不会被调用。

您说过要实现这样的功能:

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

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

    def functionIneed(self):
        pass
B(A)类:
def functioned():
通过
但实际上,您将要制作的内容更像这样(除非您最初打算制作一个或多个方法):

B(A)类:
def功能化(自):
通过
然后您可以调用
B.functionined(A的实例)
。(这是必须的优点之一)

那么:

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

仔细阅读duck类型。

您没有正确定义类。 应该是这样的:

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了

我刚刚在博客上写了一个可能更好,也可能更糟的替代解决方案。与
\uuuu class\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?你知道,linkrot etcSo如果我想从另一个类继承,并希望能够将父类转换为子类,对吗?还是我的思维模式错了<代码>类B(A):定义初始化(self,A_实例):A_实例。_类__=B