Python 类中的_uinit _;函数是否可以添加或更改而不覆盖它?
在Python3.x中,具有给定的类层次结构,其中Python 类中的_uinit _;函数是否可以添加或更改而不覆盖它?,python,python-3.x,class,inheritance,setattr,Python,Python 3.x,Class,Inheritance,Setattr,在Python3.x中,具有给定的类层次结构,其中子类零和子类继承自超类 类超类(对象): 定义初始化(self,*args,**kwargs): self.thing_zero=“继承的字符串。” 类子类零(超类): 定义初始化(self,*args,**kwargs): 超类._初始化(self,*args,**kwargs) self.thing\u one=“子类零的字符串。” 类子类(超类): 定义初始化(self,*args,**kwargs): 超类._初始化(self,*args
子类零
和子类
继承自超类
类超类(对象):
定义初始化(self,*args,**kwargs):
self.thing_zero=“继承的字符串。”
类子类零(超类):
定义初始化(self,*args,**kwargs):
超类._初始化(self,*args,**kwargs)
self.thing\u one=“子类零的字符串。”
类子类(超类):
定义初始化(self,*args,**kwargs):
超类._初始化(self,*args,**kwargs)
self.thing\u one=“子类的字符串。”
scz=子类零()
sco=子类()
如果我们想赋予子类从kwarg
设置标题的能力,那么可以使用类似这样的内置setattr
函数重新定义超类的\uuuuuuuuuu
函数
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__)
但要做到这一点,必须了解
\uuuu init\uuuu
的先前结构,以维护完整的功能。有没有一种方法可以添加到超类
的\uuuu init\uuuu
函数中而不完全覆盖它 为什么您要尝试更改超类。\uuu init\uuu
?为什么子类构造函数不能处理这个问题?这是一个很好的观点。我正在尝试强制一个流行模块的所有子类继承相同的行为,而不必重写超类的init。然后在超类
和派生类之间放置另一个类,使用您想要的行为。谢谢@aryamcarthy。是的,这会起作用,但我希望避免修改子类。我正在尝试为python模块更改超类的所有子类,而不必更改源代码。