#python #inheritance
#python #наследование
Вопрос:
У меня есть код (упрощенный):
class A(object):
attrib1 = "a"
attrib2 = "b"
class B(A):
flag = True
в каком-то месте моего кода у меня есть экземпляр A, но мне нужно создать экземпляр класса B, который будет содержать все данные из экземпляра A… Я чувствую себя глупо, но я не хочу делать что-то вроде:
class B(A):
def __init__(self,a1,a2,a3,a4,..):
self.a1 = a1
self.a2 = a2
и вызываем как:
obj_b = B( obj_a.a1, obj_a.a2,...)
Ответ №1:
class B(A):
def __init__(self, obj):
self.__dict__.update(obj.__dict__)
Комментарии:
1. Обратите внимание, что это, как правило, плохая идея. Проверьте тип
obj
и скопируйте только те атрибуты, которые имеют значение.2. На данный момент это решит проблему, и я решу проблему, как только она возникнет, но спасибо за предупреждение.
3.
__dict__
может быть недоступен, и он прерывается, если вы используетеproperty
… Кроме того, некоторые данные могут быть определены в классе, поэтому они не будут находиться внутриobj.__dict__
Ответ №2:
Другой вариант — изменить __class__
переменную в вашем экземпляре A.
a = A()
a.__class__ = B