当前位置: 首页 > 面试题库 >

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

锺离浩慨
2023-03-14
问题内容

我有一堂课:

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

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


问题答案:

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

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


 类似资料:
  • X2.2.0新增 sp_get_all_child_terms($term_id) 功能: 指定分类下的所有子分类 参数: $term_id: 分类id 返回: 类型array,指定分类下的所有子分类 使用: $terms = sp_get_all_child_terms(1);

  • 我需要从一个非常大的表中选择一个“页”的数据。由于WHERE子句和需要分页到相当大的偏移量,我使用一个子查询来获取ID。只有在末尾放置时,此策略才有效。这导致(我认为)到数据库的额外往返。有什么方法可以避免额外的? 附言。我这样做的原因是由于orderBy/offset/limit用于大偏移量(我选择的列之一由于是blob类型,不适合添加到索引中,所以我不能创建覆盖索引)。

  • 问题内容: 我有下面列出的3个表: 该SQL描述了我想要的: 问题是,在这种情况下,我有一个很大的NOT IN值,据我所知它将影响服务器性能(我不确定,因为我从未尝试对其进行基准测试或Google评估)。有什么建议吗? 问题答案: 试试这个 :

  • 我正在设计一个名为unlink Node的非静态无效方法,它将节点n作为参数。它应该确保节点与它之前和之后的节点解除链接。它需要改变n后节点的prev和n前节点的下一个。目前,当我运行它时,我得到了错误 第111行n.getPrev(). Next=null; 尽管我已经输入了语句,以确保如果n是尾部,则不访问它的上一个,如果是头部,则不访问它的下一个,以确保没有访问null。 方法如下: 以及设

  • 问题内容: 我有子过程命令将md5校验和检查为 它工作正常。但是我读了尽量避免 但是当我跑步 我得到错误 我可以运行以上命令或解决方法还是可以保留? 问题答案: 只需将参数传递为 列表即可 : 从文档: args 是所有调用所必需的,并且应为字符串或程序参数序列。通常最好提供一个参数序列,因为它允许模块处理任何必需的参数转义和引用(例如,允许在文件名中保留空格)。如果传递单个字符串,则必须是 sh

  • X1.2新增 sp_sql_posts_bycatid($cid,$tag,$where) 功能: 根据分类文章分类ID 获取该分类下所有文章(包含子分类中文章),调用方式同sp_sql_posts 参数: $cid:分类id $tag:查询标签,以字符串方式传入,例:"order:post_date desc,listorder desc;"field:调用post指定字段,如(id,post