【问题标题】:How to copy all attributes and functions in a class instance to another class in python?如何将类实例中的所有属性和函数复制到python中的另一个类?
【发布时间】:2019-10-17 03:11:59
【问题描述】:

假设我们有一个未知类的实例

parent=Unknown()

这个对象不一定是特定类的实例(它可能是任何类的实例,但我知道潜在类的名称)。我想定义一个新类来继承该对象的属性和功能。由于我不知道这个实例的类是什么,我不能使用 python 类继承。我知道如果父类已知,我们可以使用以下代码:

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

但就我而言,我不知道父类是什么,我只有它的一个实例。所以我想做这样的事情:

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

有人有想法吗?

【问题讨论】:

    标签: python-3.x class inheritance


    【解决方案1】:

    这会将类 (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

    【讨论】:

    • 感谢您的解决方案。第一个答案仅复制属性(类变量而不是类方法)。第二个答案复制了“a”中的所有想法并删除了 Test2 属性。它甚至将对象“child”的类从“Test2”更改为“Test”,这不是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多