避免在子类中指定所有参数

发布于 2021-01-29 17:46:04

我有一堂课:

class A(object):
    def __init__(self,a,b,c,d,e,f,g,...........,x,y,z)
        #do some init stuff

我有一个子类,需要一个额外的arg(最后一个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

编写所有这些样板代码似乎很愚蠢,例如,将所有args从B‘Ctor传递到对A‘ctor的内部调用,因为自那时以来,对’ctor的每次更改都A必须应用于’ctor
B‘代码中的其他两个地方。

我猜想python有一些习惯用法可以处理我不知道的情况。你能为我指出正确的方向吗?

我最好的预感是为A提供一种Copy-Ctor,然后将B的代码更改为

class B(A):
     def __init__(self,instanceOfA,W):
         A.__copy_ctor__(self,instanceOfA)
         self.__W=W

这将满足我的需求,因为在给定父类的实例时,我总是创建子类,尽管我不确定是否可能…

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    考虑到参数可以按名称或按位置传递,我编写代码:

    class B(A):
        def __init__(self, *a, **k):
          if 'W' in k:
            w = k.pop('W')
          else:
            w = a.pop()
          A.__init__(self, *a, **k)
          self._W = w
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看