添加的子类

时间:2016-04-13 19:39:33

标签: python inheritance

首先,我有一个班级:

class MyClass(object):
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2

class AnotherClass:
    # what goes here ???

我想做的是让AnotherClass接受两个输入,

  1. a
  2. 的实例(称之为MyClass
  3. 另一个论点arg2
  4. 以便arg2可用于为AnotherClass创建其他属性,MyClass的每个属性也是AnotherClass的属性,但不会重新找到或者复制到AnotherClass实例中,但通过查看a找到。 (假设MyClass具有许多属性,与显示的示例不同。)例如,我希望能够做到

    >>> a = MyClass(1, 2)
    >>> b = AnotherClass(a, 3)
    >>> b.attr1 # found via a.attr1
    1
    >>> b.attr2 # found via a.attr1
    2
    >>> b.attr3
    3
    >>> c = AnotherClass(a, 4)
    >>> c.attr1 # found via a.attr1
    1
    >>> c.attr2 # found via a.attr1
    2
    >>> c.attr3
    4
    

    AnotherClass中应该找到哪些代码?

2 个答案:

答案 0 :(得分:1)

如果你真的想做你想做的事,你想要的构造函数是:

currentItem

第二行有效地获取当前分配给a的每个属性,然后将它们的副本分配给self(__dict__是python存储对象属性的字典)。

答案 1 :(得分:0)

您想要的代码是:

def __init__(self, a : Class, arg2):
    super().__init__(a.attr1,a.attr2)
    self.attr3 = arg2

但是,除非您的代码特别希望SubClasses的实例初始化为预先存在的Class实例的伪克隆,否则您可能会发现此代码更有用:

def __init__(self, attr1, attr2, arg2):
    super().__init__(attr1,attr2)
    self.attr3 = arg2