当父类不能将自身作为构造函数的参数时,使用实例初始化扩展类

时间:2015-05-22 13:04:41

标签: class python-2.7 inheritance constructor

确定。我试图通过创建一个子类来扩展数据结构类。用例是程序已经有一个父类的实例,并将其传递给子类的构造函数。换句话说,我有一个父类的实例A,我想将它提供给扩展类构造函数以获取扩展类的实例B.

class child(Parent):
    def __init__ (self, dataInstance=None):
        super(child, self).__init__(dataInstance)

child.someparentmethod() # YES! 

因此,如果Parent类可以在其构造函数中获取自身的实例,这将起作用(实际上我正在处理多个类,其中一些做,有些则没有)。我想要避免的hack-y事件只是将父数据结构作为另一个类的属性传递:

class notChild():
    def __init__ (self, dataInstance=None):
        self.data = dataInstance

notChild.data.someparentmethod()  # yuck.

我在python中对OOP比较陌生,我希望我忽略了一些明显的东西。谢谢!

1 个答案:

答案 0 :(得分:0)

确定。这是我使用的解决方案,具体针对实现,我很想知道是否有更通用/ pythonic的方法来实现这一点:

class child(pandas.Panel4D):
    def __init__ (self, d=None):
        if isinstance(d, pandas.Panel4D):
            d = d._data
            super(child, self).__init__(d)
        else:
            super(child, self).__init__(d)

基本上,如果子构造函数被提供给父实例,它将访问它的基础数据,这是父构造函数可以提取的类。