可以在不覆盖它的情况下添加或更改类中的__init__函数吗?

时间:2017-08-15 18:07:22

标签: python python-3.x class inheritance setattr

在具有给定类层次结构的Python 3.x中,SubClassZeroSubClassOne继承自SuperClass;

class SuperClass(object):
    def __init__(self, *args, **kwargs):
        self.thing_zero = "Inherited string."

class SubClassZero(SuperClass):
    def __init__(self, *args, **kwargs):
        SuperClass.__init__(self, *args, **kwargs)
        self.thing_one = "SubClassZero's string."

class SubClassOne(SuperClass):
    def __init__(self, *args, **kwargs):
        SuperClass.__init__(self, *args, **kwargs)
        self.thing_one = "SubClassOne's string."

scz = SubClassZero()
sco = SubClassOne()

如果我们想让子类能够从kwarg设置标题,那么可以使用构建的__init__函数重新定义SuperClass的setattr函数;

def __init__(self, *args, **kwargs):
    self.thing_zero = "Inherited string."
    if 'title' in kwargs:
        self.title = kwargs['title']
    else:
        self.title = ""

setattr(SuperClass, '__init__', __init__)

但要做到这一点,必须知道__init__的先前结构才能保持全部功能。有没有办法以某种方式添加__init__ SuperClass函数而不完全覆盖它?

0 个答案:

没有答案