我想知道如何,这是由一些函数子类返回父对象转换。
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类,但由于它的代码结构是不可能的。 谢谢
Python不支持“铸造”。 您将需要编写B.__init__()
以便它可以采取A
并适当地初始化。
我有一个强烈的质疑,不仅如此,信念,那有什么可怕的错误与您的程序设计,它需要你做到这一点。 在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
但实际上你会做更多的东西像这样的(除非你本来打算在制作类或静态摆在首位方法):
class B(A):
def functionIneed(self):
pass
然后,你可以调用B.functionIneed(instance_of_A)
(这是具有的优点之一传递self
明确的方法。 )
您没有正确定义的类。 应该是这样的:
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()
不出所料
你忘了参考插件
怎么样:
i = module.getObject() # i will get object that is class A
try:
i.functionIneed()
except AttributeError:
# handle case when u have a bad object
阅读上鸭打字。