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

使用__init__继承属性

双志强
2023-03-14
问题内容

我是刚开始学习Python的Java人。举个例子:

class Person():
    def __init__(self, name, phone):
        self.name = name
        self.phone = phone

class Teenager(Person):
    def __init__(self, name, phone, website):
        self.name=name
        self.phone=phone
        self.website=website

我肯定有很多冗余代码(我知道在Java中,上面的代码有很多冗余)。

对于已经从父类继承了哪些属性,哪些部分是多余的?


问题答案:

__init__在python中为类编写函数时,应始终调用__init__其超类的函数。我们可以使用它直接将相关属性传递给超类,因此您的代码如下所示:

class Person(object):
    def __init__(self, name, phone):
        self.name = name
        self.phone = phone
class Teenager(Person):
    def __init__(self, name, phone, website):
        Person.__init__(self, name, phone)
        self.website=website

正如其他人指出的那样,您可以替换该行

Person.__init__(self, name, phone)

super(Teenager, self).__init__(name, phone)

并且代码将执行相同的操作。这是因为pythoninstance.method(args)只是的简写Class.method(instance, args)。如果要使用super,需要确保将其指定object为基类,Person就像我在代码中所做的那样。

在Python文档有关于如何使用的详细信息super关键字。在这种情况下,重要的是,它告诉Python来看看该方法__init__在超类的self,是不是Teenager



 类似资料:
  • 问题内容: 我有一个带有很多参数的基类: 所有继承类都应运行基类的方法。 我可以在每个继承的类中编写一个将调用超类的方法,但这将是严重的代码重复: 自动调用超类的最Pythonic方法是什么? 问题答案: 如果有助于解决您的噩梦,请考虑使用 args和* kw。

  • 问题内容: 我正在阅读“深入Python”,并在有关类的章节中给出了以下示例: 然后作者说,如果要覆盖该方法,则必须使用正确的参数显式调用父方法。 如果该班有一个以上的祖先班怎么办? 我是否必须显式调用所有祖先类的方法? 另外,我是否必须对要覆盖的其他任何方法执行此操作? 问题答案: 关于子类-超类调用,这本书有些过时了。在子类化内置类方面也有些过时。 如今看起来像这样: 请注意以下几点: 我们可

  • 我有几个配置文件,比如: application.yaml 我想我需要一些定制属性spring Binder.class定制,但我找不到任何解决方案。 提前感谢!

  • 我有一个类,比如说,我想用Jackson从JSON中填充它,但是属性名因源而异。下面是代码当前的外观: 正如您所看到的,和在结构上是相同的,但我需要不同的子类来指定不同的属性名称。 是否有一些方法可以在不需要重新声明和重新实现每个方法的样板的情况下强制执行模型?

  • webresources定义如下。这个类是由NetBeans自动添加的。

  • 将所有服务器都放在一个篮子里的系统管理员是勇敢的(或者说是愚蠢的)。 比方说,你将服务器托管在三个不同的提供商:WreckSpace、GoDodgy 和 VerySlow。 他们有不同的数据中心且分布在不同的地理位置,所以你需要对服务器配置做一些小的改动, 以适应每个提供商。你有几种类型的服务器,它们随机分布在三个不同的提供商。 使用 Puppet 的一种实现方法是在节点定义中设置一个变量用于告知