在Python中将对象转换为派生类型

时间:2013-07-19 00:02:50

标签: python type-conversion

我想将类型A的对象强制转换为B类,因此我可以使用B的方法。类型B继承A.例如,我有类我的类B:

class B(A):
    def hello(self):
        print('Hello, I am an object of type B')

My Library,Foo,有一个返回A类对象的函数,我想将它转换为B类。

>>>import Foo
>>>a_thing = Foo.getAThing()
>>>type(a_thing)
A
>>># Somehow cast a_thing to type B
>>>a_thing.hello()
Hello, I am an object of type B

2 个答案:

答案 0 :(得分:1)

执行此操作的常用方法是为B编写一个类方法,该方法接受A对象并使用其中的信息创建新的B对象。

class B(A):
    @classmethod
    def from_A(cls, A_obj):
       value = A.value
       other_value = A.other_value
       return B(value, other_value)

a_thing = B.from_A(a_thing)

答案 1 :(得分:0)

AFAIK,Python中没有子类。您可以做的是创建另一个对象并复制所有属性。您的B类构造函数应该使用类型A的参数来复制所有属性:

class B(A):
  def __init__(self, other):
    # Copy attributes only if other is of good type
    if isintance(other, A):
      self.__dict__  = other.__dict__.copy()
  def hello(self):
    print('Hello, I am an object of type B')

然后你可以写:

>>> a = A()
>>> a.hello()
Hello, I am an object of type A
>>> a = B(a)
>>> a.hello()
Hello, I am an object of type B