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

2024-09-25 00:27:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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,但由于代码的结构,这是不可能的。 谢谢


Tags: 对象函数getthatobjectinitisdef
3条回答

我有一个强烈的怀疑,不,信念,你的程序设计有可怕的错误,它需要你这样做。在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__永远不会被调用。

你说你想实现这样的目标:

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

但实际上,您要做的是更像这样的东西(除非您最初打算创建一个classstatic方法):

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

然后您可以调用B.functionIneed(instance_of_A)。(这是必须pass ^{} explicitly to methods.的优点之一)

Python不支持“casting”。您将需要编写B.__init__(),以便它可以使用A并适当地初始化自身。

相关问题 更多 >