Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类中的_uinit _;函数是否可以添加或更改而不覆盖它?_Python_Python 3.x_Class_Inheritance_Setattr - Fatal编程技术网

Python 类中的_uinit _;函数是否可以添加或更改而不覆盖它?

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

在Python3.x中,具有给定的类层次结构,其中
子类零
子类
继承自
超类

类超类(对象):
定义初始化(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模块更改超类的所有子类,而不必更改源代码。