Как скопировать все атрибуты и функции в экземпляре класса в другой класс в Python? - PullRequest
1 голос
/ 17 октября 2019

Предположим, что у нас есть экземпляр неизвестного класса.

parent=Unknown()

Этот объект не обязательно является экземпляром определенного класса (это может быть экземпляр любого класса, ноЯ знаю название потенциальных классов). Я хочу определить новый класс для наследования атрибутов и функций этого объекта. Поскольку я не знаю, каков класс этого экземпляра, я не могу использовать наследование классов Python. Я знаю, что если бы родительский класс был известен, мы могли бы использовать следующий код:

class Child(Unknown)
     def __init__(self):
         super().__init__()

Но в моем случае я не знаю, что такое родительский класс, и у меня просто есть его экземпляр. Поэтому я хочу сделать такую ​​вещь:

class Child()
     def __init__(self, parent):
         super().__init__()

У кого-нибудь есть идея?

1 Ответ

0 голосов
/ 17 октября 2019

это установит каждый атрибут экземпляра класса (parent) в атрибут с таким же именем в классе с именем Child. Обратите внимание, что он будет изменять только атрибуты в классе dict.

child = Child()
for att, value in parent.__dict__.items():
    setattr(child, att, value)

. Вы можете изменить почти ВСЕ атрибуты с помощью этого (__weakref__), например, не изменится):

class Test():
    def __init__(self):
        self.t = None

a = Test()
a.t = 'set t'
a.b = 'set b'

class Test2():
    def __init__(self):
        pass

child = Test2()
for att in dir(a):
    try:
        setattr(child, att, getattr(a,att))
    except AttributeError:
        continue

Но вы также будете изменять класс переменной, т.е. child.__class__ == Test

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...