我想知道如何将某些函数返回的父对象转换为子类。
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类,但由于代码结构不可能。 感谢
答案 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
但是你真正想做的事情更像是这样(除非你打算首先制定class或static方法):
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
阅读鸭子打字。