![](/img/trans.png)
[英]Python: How to in inherit all current attributes of parent class at time of child class initialization?
[英]How to convert (inherit) parent to child class?
我想知道如何将一些 function 返回的父 object 转换为子 class。
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()
我无法更改 class A。如果可以的话,我会将 functionIneed 实现为 class A,但由于代码结构,这是不可能的。
Python 不支持“铸造”。 您将需要编写B.__init__()
以便它可以接受A
并适当地初始化自身。
我有一个强烈的怀疑,不,确信,你的程序设计有一些可怕的错误,它要求你这样做。 在 Python 中,与 Java 不同,很少有问题需要类来解决。 如果您需要 function,只需定义它:
def function_i_need(a):
"""parameter a: an instance of A"""
pass # do something with 'a'
但是,如果我不能劝阻您不要让 function 成为 class 的方法,您可以通过设置实例的__class__
属性来更改实例的 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或static方法):
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()
不出所料
你忘了参考ins
跳出框框思考:
不是将新的 class 与您想要的 function 相提并论,而是将 function 添加到您已有的 class 或实例中怎么样?
怎么样:
i = module.getObject() # i will get object that is class A
try:
i.functionIneed()
except AttributeError:
# handle case when u have a bad object
阅读鸭子打字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.