我正在尝试开发一种机制来检测无效的kwargs,它对继承是健壮的。我想要创建一个带有init方法的类,该方法检查意外的kwarg,我希望创建另一个类,该类继承自这个第一个类,并使用相同的kwarg检查。这可能比两层更深,但我认为解决两层问题可以进一步推断。以下是我的尝试:
class MyClass(object):
    def __init__(self, **kwargs):
        # possible kwargs and default values
        self._kwargs_def = {
            'a':1, 
            'b':2,
            'c':3,
            }
        self.a = kwargs.pop('a', self._kwargs_def['a'])
        self.b = kwargs.pop('b', self._kwargs_def['b'])
        self.c = kwargs.pop('c', self._kwargs_def['c'])
        assert len(kwargs) == 0, f"Invalid kwargs: {kwargs.keys()}"
        
class MyChildClass(MyClass):
    def __init__(self, **kwargs):
        super.__init__() # run once to generate _kwargs_def
        # repeat to override defaults with any appropriate kwargs
        super.__init__(**{key:val for key, val in kwargs.items() if key in super._kwargs_def})
    
        self._kwargs_def.update({'d':4, 'e':5})
        
        self.d = kwargs.pop('d', self._kwargs_def['d'])
        self.e = kwargs.pop('e', self._kwargs_def['e'])
        
        assert len(kwargs) == 0, f"Invalid kwargs: {kwargs.keys()}"
        
my_instance = MyClass(a=7) # works
# I need a way around this: TypeError: descriptor '__init__' of 'super' object needs an argument
my_child_instance = MyChildClass(e=37) # doesn't work but should???
my_instance = MyClass(z=7) # fails and should fail
my_child_instance = MyChildClass(z=37) # fails but for wrong reasonhttps://stackoverflow.com/questions/70571941
复制相似问题