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

子类-超类的参数

宦翔飞
2023-03-14
问题内容

我对如何在Python的子类和超类之间传递参数感到有些困惑。考虑以下类结构:

class Superclass(object):
    def __init__(self, arg1, arg2, arg3):
        #Inilitize some variables
        #Call some methods

class Subclass(Superclass):
    def __init__(self):
        super(Subclass, self).__init__()
        #Call a subclass only method

我遇到麻烦的地方是了解如何在超类和子类之间传递参数。是否有必要在子类初始化程序中重新列出所有超类参数?仅在子类的新参数将在哪里指定?当我尝试使用上面的代码实例化一个子类时,它只需要1个参数,而不是我列出的原始4个(包括self)。

TypeError: __init__() takes exactly 1 argument (4 given)

问题答案:

没有魔术发生!__init__方法与其他方法一样工作。您需要在子类初始化程序中显式地获取所需的所有参数,并将它们传递给超类。

class Superclass(object):
    def __init__(self, arg1, arg2, arg3):
        #Initialise some variables
        #Call some methods

class Subclass(Superclass):
    def __init__(self, subclass_arg1, *args, **kwargs):
        super(Subclass, self).__init__(*args, **kwargs)
        #Call a subclass only method

当您调用Subclass(arg1, arg2, arg3)Python时,只会调用Subclass.__init__(<the instance>, arg1, arg2, arg3)。它不会神奇地尝试将某些参数与超类和某些参数与子类进行匹配。



 类似资料:
  • 熟悉Java,但对静态编程语言相当陌生。 当子类参数与超类val同名时... Android Studio不会抛出验证错误,说明需要@Overder注释。但是,尝试从Business中访问引用参数而不是超类val(我觉得这就像覆盖)。 当然,我可以将参数命名为不同的名称,但我真的只想将名称传递给超类......否则不包括它在中的任何存储。 我忽略了什么吗?我很惊讶,即使我没有将FirstBusin

  • 有没有方法用子类的静态成员类参数化超类? exampleSuperClass.java: 编译失败,错误为: 或者与: 成员不能解析为类型 如果用另一个包保护的顶级类来参数化ExampleSubClass,它工作得很好(也就是没有错误)。 这背后的驱动力是我有一个泛型超类和许多不同的和对。但是由于只被引用,最好是: 限制的访问,使其成为静态成员类和 通过不给自己的文件来减少文件数。 那么,在参数化

  • 7.3 超类与子类* 当我们用类去描述现实世界的对象时,有时会发现某些类之间是“一般与特殊”的关系。 例如,“人”与“学生”之间就是一般与特殊的关系,而“学生”与“研究生”也是一般与特 殊的关系。当然,“人”的特殊例子还包括“教师”,“学生”的特殊例子还包括“旁听生”。 总之,通过一般与特殊的关系,可以将所有类组织成为一个层次结构,称为类层次。如图 7.11 所示。 [图片丢失] 图 7.11 类

  • 我有一个名为的超级类,我有3个子类,分别是,和。 在每个子类中,我都有私有参数,和。 我想在 类中创建一个名为 的方法,该方法从 中删除 1 并将 10 添加到中,以便我可以在 main 方法中调用它们时将该方法应用于所有子类。但是如何将私有参数从子类获取到超类中呢? 我不能在超类中声明它们,因为每个子类都有自己的默认启动参数,这些参数应该在游戏期间进行。

  • 在java中,我们可以缩小返回类型和throws异常类型(甚至删除throws子句): 但是,参数类型呢(如果A采用< code>T,那么为什么B不采用< code >?超级T)如: 让我们考虑一下我认为完全符合逻辑的这段代码: 所以我要说的是,在使用的代码上下文中仍然有效。

  • 我有一个抽象超类和两个非抽象子类和。如何在超类方法中定义类型,如下所示 我允许在子类方法中编写具体类型(例如,或) 在上面的示例中,子类方法不会覆盖超类方法。

  • 然后我调用子类中的方法。 我希望有一个对象创建的基础上,子类已经被调用,如果这是有意义的?

  • 假设我有一个抽象类Person。有另一个类学生扩展了Person。但是学生类有一个成员变量,比如String类型的学院,它在Person类中不存在。 我们知道我们可以从超类引用子类,例如, 人p=新学生(); 对象p会有成员学院吗?