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

简单的python继承

杨彦君
2023-03-14
问题内容
class Animal(object):
    def __init__(self, nlegs=4):
        print '__init__ Animal'
        self.nlegs = nlegs

class Cat(Animal):
    def __init__(self, talk='meow'):
        print '__init__ Cat'
        self.talk = talk

class Dog(Animal):
    def __init__(self, talk='woof'):
        print '__init__ Dog'
        self.talk = talk
  1. 为什么我的猫tom = Cat()没有nlegs属性?
  2. 我们应该Animal.__init__()从内部显式调用Cat.__init__,还是应该做更有趣的事情super
  3. 如果我想创建一条5条腿的猫该怎么办,是否需要向该Cat.__init__接口添加其他参数?

问题答案:

要建立在其他人都说过的基础上,是的,您需要调用父__init__方法。

通常最好使用super。但是,在某些情况下(尤其是当您从多个类继承时),这可能是一个大难题。我将避免赘述,不乏讨论它的各种文章。(此外,其他一些“特殊”功能也有一些奇怪之处。例如,您可以做到,super(SomeCls, self).__getitem__(5)super(SomeCls, self)[5]不起作用。)

至于为什么它的使用是一个好主意一个简单的例子,你可以把DogCat继承Mammal(从继承Animal),并没有改变地方比其他类的代码DogCat继承。

至于您的tom实例为什么没有tom.nlegs的原因,是因为您没有调用Animal__init__方法。

还要记住,并不是在初始化时就需要设置所有内容。在这个例子中,它更有意义并不像一套东西nlegs__init__方法。而是直接在类中进行设置。例如

class Mammal(object):
    nlimbs = 4
    def __init__(self):
        print "I'm a mammal!"

class Cat(Mammal):
    def __init__(self, color="calico"):
        self.color = color
        super(Cat, self).__init__()
        print "I have {0} legs I am {1}".format(self.nlimbs, self.color)

class FiveLeggedCat(Cat):
    nlimbs = 5

基本上,如果某事可能因实例而异(例如,猫的颜色)或需要在初始化时完成(例如,打开文件),则应将其设置为__init__

否则,如果我们希望该类的任何实例都相同,那么直接在类定义中进行设置会更干净。

同样,以这种方式设置的属性将可用于文档工具(例如,内置help函数),而在初始化时设置的属性将不可用。



 类似资料:
  • 本文向大家介绍javascript实现继承的简单实例,包括了javascript实现继承的简单实例的使用技巧和注意事项,需要的朋友参考一下 作为一门面向对象的语言,那么继承自然就是一大特征,下面是一段非常简单代码实例,它演示了实现继承的基本原理,有兴趣的或者恰好要学习此方面的朋友可以参阅一下,希望能够给大家来帮组。 以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 主要内容:JPA继承注解,JPA继承策略继承是面向对象编程语言的一个关键特性,其中子类可以获取其父类的属性。 此功能增强了代码的可重用性。 关系数据库不支持继承机制。 因此,Java Persistence API(JPA)用于映射关系数据库模型中的继承关键特性。 JPA继承注解 以下是最常用的JPA继承注释 - - 此注解应用于根实体类以定义继承策略。 如果没有使用此注释定义策略类型,那么它遵循单表战略。 - 此注释应用于由其子类继承

  • 本文向大家介绍超简单的Python HTTP服务,包括了超简单的Python HTTP服务的使用技巧和注意事项,需要的朋友参考一下 超如果你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比如:Apache,ISS等。那么, Python 可能帮助你。使用Python可以完成一个简单的内建 HTTP 服务器。于是,你可以把你的目录和文件都以HTTP的方式展示出

  • 在面向对象的程序设计中,定义一个新的 class 的时候,可以从某个现有的 class 继承,新的 class 称为子类,而被继承的 class 称为基类、父类或超类。 Python 中继承的语法如下: class Parent: pass class Child(Parent): pass 在第 1 行,定义了父类 Parent; 在第 4 行,定义了子类 Child,语法

  • 问题内容: 有人可以告诉我这段代码在做什么吗?无论如何,它只是打印“计数”。我只想要一个非常简单的素数生成器(没什么花哨的)。 问题答案: 有一些问题: 当计数不除以x时,为什么要打印计数?这并不意味着它是素数,仅意味着该特定x不会将其除 移至下一个循环迭代-但你确实想使用停止它 这是你的代码,其中包含一些修复程序,它仅输出质数: 有关更有效的质子生成,请参见其他人的建议,参见戊二烯筛。这是一个不

  • 本文向大家介绍简单了解python的break、continue、pass,包括了简单了解python的break、continue、pass的使用技巧和注意事项,需要的朋友参考一下 break break可以用来立即退出循环语句(包括else) continue continue可以用来跳过当次循环 注意:break和continue都是只对离他最近的循环起作用 pass pass是用来在判断或