我有一节课:
class A(object):
def __init__(self,a,b,c,d,e,f,g,...........,x,y,z)
#do some init stuff
我有一个子类需要一个额外的参数(最后一个W
)
class B(A):
def __init__(self.a,b,c,d,e,f,g,...........,x,y,z,W)
A.__init__(self,a,b,c,d,e,f,g,...........,x,y,z)
self.__W=W
编写所有这些锅炉盘代码似乎是愚蠢的,例如将所有参数从B
的Ctor传递到A
的Ctor的内部调用,从那时起,对A
的Ctor的每次更改都必须应用到B
代码中的其他两个位置。
我猜python有一些习惯用法来处理这些我不知道的情况。你能告诉我正确的方向吗?
我最好的预感是,为a设置一个拷贝Ctor,然后将B的代码更改为
class B(A):
def __init__(self,instanceOfA,W):
A.__copy_ctor__(self,instanceOfA)
self.__W=W
这将适合我的需要,因为我总是在给定父类的实例时创建子类,尽管我不确定是否可能。。。
编辑:基于Matt的建议,为了解决gnibbler对位置参数方法的关注,您可以检查以确保指定的附加子类特定参数类似于Alex's answer:
原始答案:
与Matt's answer的想法相同,改为使用
super()
。使用
super()
调用超类的__init__()
方法,然后继续初始化子类:考虑到参数可以按名称或位置传递,我将编写代码:
在传递给
__init__
的某些或所有参数都具有默认值的情况下,避免在子类中重复__init__
方法签名是很有用的。在这些情况下,
__init__
可以将任何额外的参数传递给另一个方法,该方法的子类可以重写:相关问题 更多 >
编程相关推荐