如何(继承)父转换为子类?(How to convert (inherit) parent to c

2019-07-28 19:42发布

我想知道如何,这是由一些函数子类返回父对象转换。

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类。如果我能我会实现functionIneed A类,但由于它的代码结构是不可能的。 谢谢

Answer 1:

Python不支持“铸造”。 您将需要编写B.__init__()以便它可以采取A并适当地初始化。



Answer 2:

我有一个强烈的质疑,不仅如此,信念,那有什么可怕的错误与您的程序设计,它需要你做到这一点。 在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__将永远不会被调用。



Answer 3:

你说你要实现这样的事情:

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

但实际上你会做更多的东西像这样的(除非你本来打算在制作类或静态摆在首位方法):

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

然后,你可以调用B.functionIneed(instance_of_A) (这是具有的优点之一传递self明确的方法。 )



Answer 4:

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

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()

不出所料

你忘了参考插件



Answer 5:

怎么样:

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

阅读上鸭打字。



文章来源: How to convert (inherit) parent to child class?