我是Python的新手,我正在寻找一种编写具有许多可选属性的类的方法,可以在单个代码行中初始化。
到目前为止,我发现的是 init 方法的可选参数方法,可以按名称分配:
class MyClass():
def __init__(self, param1=None, param2=None, param3=None, param4=None):
self.param1 = param1
self.param2 = param2
self.param3 = param3
self.param4 = param4
并初始化 可以看起来像:
o1 = MyClass(param2="someVal", param4="someOtherVal")
这种方法似乎很好,而且我认为像IntelliJ这样的IDE将能够以这种方式提供一些代码完成。
但是,我想知道这是否是正确的方法,以防我创建一个复杂的类层次结构。假设MyClass将继承MyBaseClass和MyOtherClass,我希望通过MyClass的init方法(或其他方式?)初始化所有类中的所有属性。
实现这一目标的最佳方法是什么,希望还能帮助IDE提供代码完成功能?
感谢您的帮助。
答案 0 :(得分:0)
在构造函数中有如此多可选参数的类可能是一个"代码气味"并且重新设计是有序的。我建议写一些参数组类:
class ParamSetA:
def __init__(param2="someVal", param4="someOtherVal"):
self.param2 = param2
self.param4 = param4
class ParamSetB:
def __init__(param3, param4):
self.param3 = param3
self.param4 = param4
class MyClass():
def __init__(self, params):
self.params = params
现在很明显如何将参数传递给其他相关类:只需传递封装一组有效参数的整个对象。
这也使验证更容易:使用无意义的参数集(例如,互斥参数或相关参数)构造MyClass
更加困难。
答案 1 :(得分:0)
这个怎么样?
inspect.getargspec()
参考:Get a list/tuple/dict of the arguments passed to a function? - 您可能还需要使用{{1}}。