首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用__init __()方法理解Python super()

在Python中,__init__()方法是一个特殊的方法,它用于初始化对象的属性。super()是一个内置函数,用于调用父类中的方法。当你在子类中使用__init__()方法时,可以使用super()来调用父类的__init__()方法,从而实现代码的重用和减少重复。

以下是一个简单的示例,展示了如何在子类中使用__init__()方法和super()函数:

代码语言:python
代码运行次数:0
复制
class Animal:
    def __init__(self, name):
        self.name = name

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)
        self.breed = breed

my_dog = Dog("Buddy", "Golden Retriever")
print(my_dog.name)  # 输出: Buddy
print(my_dog.breed)  # 输出: Golden Retriever

在这个例子中,Dog类继承了Animal类。在Dog类的__init__()方法中,我们使用super().__init__(name)调用了父类Animal__init__()方法,并传递了name参数。这样,我们就可以在子类中使用父类的属性和方法,同时也实现了代码的重用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python3的super().__init__()

实例变量不能继承不是Python继承有问题,上面在class A中定义了一个类变量A就被成功继承下来了,python类中的所有最外层类变量,类方法,静态方法,实例方法该继承都会继承,不过实例变量是定义在...__init__构造方法中的,虽然__init__会在实例化时自动执行(不管是父类还是子类),但子类重写了父类方法,所以父类构造没有执行,只是执行了子类构造。...所以总的来说父类构造没有执行的原因是**子类重写了父类的__init__方法** 使用super()....Cinit Dbc 显然B需要调A,D需要调用B和C,显然不符合python的优雅风格 super()....__init__()是python3中简化后的方法,功能和super(self.__class__, self).__init__()一样

5.3K10
  • Python方法super()

    在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能,这时,我们就需要调用父类的方法了,可通过使用 super 来实现,比如: class Animal(object...在上面,Animal 是父类,Dog 是子类,我们在 Dog 类重定义了 greet 方法,为了能同时实现父类的功能,我们又调用了父类的方法,看下面的使用: >>> dog = Dog('dog') >...__init__(a, b) self.c = c 看了上面的使用,你可能会觉得 super使用很简单,无非就是获取了父类,并调用父类的方法。...super(cls, inst) 时,Python 会在 inst 的 MRO 列表上搜索 cls 的下一个类。...首先看类C的__init__方法: super(C, self).__init__() 这里的 self 是当前 C 的实例,self.

    85260

    python类中super()和__init__()的区别

    Base create 区别是使用super()继承时不用显式引用基类。...()方法可以看出,super()的第一个参数可以是继承链中任意一个类的名字, 如果是本身就会依次继承下一个类; 如果是继承链里之前的类便会无限递归下去; 如果是继承链里之后的类便会忽略继承链汇总本身和传入类之间的类...__init__() RuntimeError: maximum recursion depth exceeded while calling a Python object super()可以避免重复调用...如果childA基础Base, childB继承childA和Base,如果childB需要调用Base的init()方法时,就会导致init()被执行两次: class Base(object):...__init__(self) b = childB() Base的init()方法被执行了两次 enter A Base create leave A Base create 使用super()是可避免重复调用

    96060

    Pythonsuper函数直观理解

    super相关的介绍文章看了无数遍,每次看得都云里雾里的,没过多久就忘了,只模糊知道跟MRO有关,但是稍微一复杂就不知道怎么回事了,本篇文章主要记录我对super理解,尽量以简单易懂的方式介绍,如果你看完这篇文章还是没懂...那么很抱歉,我尽力了hhhh 粗暴简单的理解 super的作用就是执父类的方法,虽然这句话不完全对,但是也差不多是那么个意思了。...MRO 序列简单理解就是记录了各个类继承的先后顺序,看下面的例子就明白了 MRO 的介绍可以看这篇文章: https://python3-cookbook.readthedocs.io/zh_CN/latest...,因为python里一切都是对象,所以你可以看到四个类的终点都是object。...我们经常在类的__init__函数里看到super的身影,而且一般都是写成这个样子的super(className, self).__init__(),self其实就是某个实例化的对象。

    72320

    Python super()方法原理详解

    在学习 Python 类的时候,会碰见类中有 __init__() 这样一个函数,其实它就是 Python 的构造方法。...构造方法类似于类似 init() 这种初始化方法,来初始化新创建对象的状态,在一个对象创建后会立即调用,比如像实例化一个类: f = FooBar() f.init()#手动初始化 使用构造方法就能让它简化成如下形式...2、使用super函数(推荐) class SongBird(Bird): def __init__(self): super(SongBird,self)....super() 函数是用于调用父类(超类)的一个方法。...super 是用来解决多重继承问题的,直接用类名调用父类方法使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重 复调用(钻石继承)等种种问题。

    1.2K10

    怎么理解Python类中的super函数

    前言 在Python类的继承中,经常能看到super函数的存在,那super函数主要的作用,以及如何理解使用好这个函数?本次教程将详细讲解,希望大家看到最后,并按照代码实际操作下。...'male', 97) print(stu_1.score) parent child 97 理解super函数 我将通过下面几个进阶的知识点让你理解super函数。...__init__() #python2写法 super()....__init__() #python3写法 不仅仅是用于构造函数 super函数虽常用于构造函数,但是父类的其他函数一样也是可以用super函数的。...super函数和直接调用父类方法的区别 在单继承时,我们看到super和直接调用父类方法得到的结果是一样的,只是不会显式引用基类。但多重继承就不要了,我把上面的代码进行了修改,我相信你能看懂区别。

    84630

    Python学习笔记之PythonSuper方法

    我们最常见的,可以说几乎唯一能见到的使用super的形式是: class SubClass(BaseClass): def method(self): super(SubClass...其中,最常见的method()是__init__() 以前做过Java,刚刚接触Python的继承,的确感觉有点奇怪,有时候还能搞混。。。...为什么Pythonsuper看起来这么奇怪呢? super直接指向父类的实例不就得了么?为什么非得搞两个参数? 而且第一个参数还是自己的类名,而不是父类的类名!...那万一其中一个父类没有这个方法呢?而且先调用哪个后调用哪个?按照左右顺序么? 总之这样很乱,编译器表示压力很大。 ? 所以,pythonsuper()用了两个参数。...由于 super() 绝大多数时候,都在咱们开篇说的这种情况下使用,即在类的定义语句块内部写:super(本类名,self) 所以 python3 做了个简化,如果你在类定义的语句块内写一个不带参数的super

    43650

    Python super()方法、多继承以及MRO顺序

    __init__(self,name) 的方法,还可以使用super()方法来调用。 那么首先需要理解一下super() 方法使用说明,可以点击这里访问一下教程。...object-or-type -- 类,一般是 self Python3.x 和 Python2.x 的一个区别是: Python 3 可以使用直接使用 super().xxx 代替 super(Class...): super(B, self).add(x) 使用super() 方法来改写刚才胖子老板继承父类的 __init__ 构造方法 # coding=utf-8 # 胖子老板的父类 class...__init__,在单继承上用法基本无差 但在多继承上有区别,super方法能保证每个父类的方法只会执行一次,而使用类名的方法会导致方法被执行多次,可以尝试写个代码来看输出结果 多继承时,使用super...方法,对父类的传参数,应该是由于pythonsuper的算法导致的原因,必须把参数全部传递,否则会报错 单继承时,使用super方法,则不能全部传递,只能传父类方法所需的参数,否则会报错 多继承时,相对于使用类名

    1.6K30

    Python - 面向对象编程 - __init__() 构造方法

    什么是构造方法 在创建类时, 可手动添加一个 方法,称为构造方法,这是一个实例方法 __init__() 构造方法用于创建实例对象时使用,每当创建一个类的实例对象时,Python 解释器都会自动调用它...一般用来初始化对象的某些属性 构造方法语法格式 class 类: def __init__(self, 参数): self.属性 = 参数      ......类的默认构造方法 __init__() 构造方法并不是必写 假设不写,Python 也会自动添加一个仅包含 self 参数的 __init__() 构造方法,这又称为类的默认构造方法 不带参数的构造方法栗子...# 不带参数 class PoloBlog: def __init__(self): print("自动调用构造方法") # 定义了一个实例属性...__init__() 构造方法 带参数的构造方法栗子 # 带参数 class PoloBlog: def __init__(self, name, age): print("自动调用构造方法

    32430

    Python多继承与super使用详解

    这是我person特有的方法 这是Human的方法  总结:1.需要注意圆括号中继承父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法...3.多继承时使用super调用父类属性方法的注意事项  3.1不使用super调用父类方法使用父类名.方法名的形式。 ...__init__,在单继承上用法基本无差但在多继承上有区别,super方法能保证每个父类的方法只会执行一次,而使用类名的方法会导致方法被执行多次,具体看前面的输出结果多继承时,使用super方法,对父类的传参数...,应该是由于pythonsuper的算法导致的原因,必须把参数全部传递,否则会报错单继承时,使用super方法,则不能全部传递,只能传父类方法所需的参数,否则会报错多继承时,相对于使用类名....__init__方法,要把每个父类全部写一遍, 而使用super方法,只需写一句话便执行了全部父类的方法,这也是为何多继承需要全部传参的一个原因 3.3单继承使用super调用父类方法  class Parent

    2.7K20

    Python理解__new__和__init__的区别】

    这两个方法在对象的创建和初始化过程中扮演着关键的角色,理解它们之间的区别对于深入掌握 Python 的面向对象编程至关重要。...很多同学都以为Python中的__init__是构造方法,但其实不然,Python中真正的构造方法是__new__。__init__和__new__有什么区别?本文就来探讨一下。...__new__方法用于创建对象并返回对象,当返回对象时会自动调用__init__方法进行初始化。__new__方法是静态方法,而__init__是实例方法。...好了,理解__new__和__init__的区别后,我们再来看一下前面提出的问题,用Python怎么实现Singleton,怎么实现工厂模式?...首先,子类可以通过覆盖 new 方法来改变实例的创建方式。这意味着子类可以决定是否使用父类的实例创建逻辑,或者完全自定义自己的创建逻辑。这为子类提供了更灵活的控制权。

    33910
    领券