如何解决如何记录子类的实例化参数
我有一个抽象类,该子类是我的子类。抽象类的特征之一是它具有一个属性,该属性存储为实例化该类而输入的所有参数。例如,以下代码实现了我的目标:
class Parent:
def __init__(self,parent_parameter):
pass
class Child(Parent):
def __init__(self,parent_parameter,child_parameter_1,child_parameter_2):
self.input_params = locals()
super(Child,self).__init__(parent_parameter)
使用此代码,我可以通过self.input_params
属性访问原始输入参数。但是,问题是代码self.input_params = locals()
的第一行必须包含在每个子类中。我想要某种解决方案,例如
class Parent:
def __init__(self,parent_parameter):
self.input_params = locals()
class Child(Parent):
def __init__(self,child_parameter_2):
super(Child,self).__init__(parent_parameter)
基本上,这样编写子类的人就不必注意包含用于参数记录的代码。当然,此块中的代码将仅捕获parent_parameter
参数,而没有任何子参数。
当然可以将子参数显式传递给父类__init__
,但这打破了实现者不必担心日志记录的要求,并引入了*args
和**kwargs
感觉是多余的。
class Parent:
def __init__(self,*args,**kwargs):
self.input_params = locals()
class Child(Parent):
def __init__(self,self).__init__(parent_parameter,child_parameter_2)
class Parent:
def __init__(self,parent_parameter):
# subclass __init__() must begin with `self.input_params = locals()`
pass
class Child(Parent):
def __init__(self,self).__init__(parent_parameter)
解决方法
好吧,我认为可以通过覆盖__new__
来提出一些可行的方法。如果这是非Python或hacky,或者这是__new__
的典型用例,我将不胜感激。
class Parent:
def __new__(cls,*args,**kwargs):
input_params = {'args': args,'kwargs': kwargs}
obj = super(Parent,cls).__new__(cls)
obj.input_params = input_params
return obj
def __init__(self,parent_parameter):
pass
class Child(Parent):
def __init__(self,parent_parameter,child_parameter_1,child_parameter_2):
super(Child,self).__init__(parent_parameter)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。