精华内容
下载资源
问答
  • python中super().__init__()

    2021-01-20 03:26:06
    super().__init__() 1、子类构造函数调用super().__init__()1.1、第一个直接继承父类,可以调用name1.2、第二个继承自父类,覆盖初始化化def init,增加属性age,不能调用name属性1.3、第三个继承自父类,覆盖...
  • Python super().__init__()测试及理解

    万次阅读 多人点赞 2019-02-24 13:20:17
    Python3 super().__init__()含义 测试一、我们尝试下面代码,没有super(A, self).__init__()时调用A的父类Root的属性和方法(方法里不对Root数据进行二次操作) class Root(object): def __init__(self): self.x=...

    Python super().__init__()含义(单继承,即只有一个父类)

    测试一、我们尝试下面代码,没有super(A, self).__init__()时调用A的父类Root的属性方法(方法里不对Root数据进行二次操作)

    class Root(object):
        def __init__(self):
            self.x= '这是属性'
    
        def fun(self):
        	#print(self.x)
            print('这是方法')
            
    class A(Root):
        def __init__(self):
            print('实例化时执行')
    
    test = A()		#实例化类
    test.fun()	#调用方法
    test.x		#调用属性
    
    

    下面是结果:

    Traceback (most recent call last):
    实例化时执行
    这是方法
      File "/hom/PycharmProjects/untitled/super.py", line 17, in <module>
        test.x  # 调用属性
    AttributeError: 'A' object has no attribute 'x'
    

    可以看到此时父类的方法继承成功,可以使用,但是父类的属性却未继承,并不能用

    测试二、我们尝试下面代码,没有super(A,self).__init__()时调用A的父类Root的属性方法(方法里Root数据进行二次操作)

    class Root(object):
        def __init__(self):
            self.x= '这是属性'
    
        def fun(self):
        	print(self.x)
            print('这是方法')
            
    class A(Root):
        def __init__(self):
            print('实例化时执行')
    
    test = A()		#实例化类
    test.fun()	#调用方法
    test.x		#调用属性
    
    

    结果如下

    Traceback (most recent call last):
      File "/home/PycharmProjects/untitled/super.py", line 16, in <module>
        test.fun()  # 调用方法
      File "/home/PycharmProjects/untitled/super.py", line 6, in fun
        print(self.x)
    AttributeError: 'A' object has no attribute 'x'
    

    可以看到此时报错和测试一相似,果然,还是不能用父类的属性

    测试三、我们尝试下面代码,加入super(A, self).__init__()时调用A的父类Root的属性方法(方法里Root数据进行二次操作)

    class Root(object):
        def __init__(self):
            self.x = '这是属性'
    
        def fun(self):
            print(self.x)
            print('这是方法')
    
    
    class A(Root):
        def __init__(self):
            super(A,self).__init__()
            print('实例化时执行')
    
    
    test = A()  # 实例化类
    test.fun()  # 调用方法
    test.x  # 调用属性
    
    

    结果输出如下

    实例化时执行
    这是属性
    这是方法
    

    此时A已经成功继承了父类的属性,所以super().__init__()的作用也就显而易见了,就是执行父类的构造函数,使得我们能够调用父类的属性。

    上面是单继承情况,我们也会遇到多继承情况,用法类似,但是相比另一种Root.__init__(self),在继承时会跳过重复继承,节省了资源。

    还有很多关于super的用法可以参考
    super的使用

    展开全文
  • 转:super().__init__()详解

    千次阅读 2020-08-04 22:31:24
    测试一、我们尝试下面代码,没有super(A, self).__init__()时调用A的父类Root的属性和方法(方法里不对Root数据进行二次操作) class Root(object): def __init__(self): self.x= '这是属性' def fun(self): ...

    Python3

    super().init()含义(单继承,即只有一个父类)

    传送门

    测试一

    我们尝试下面代码,没有super().__init__()时调用A的父类Root的属性和方法(方法里不对Root数据进行二次操作)

    class Root(object):
        def __init__(self):
            self.x= '这是属性'        
        def fun(self):
        	#print(self.x)
            print('这是方法')        
    class A(Root):
       	def __init__(self):
            print('实例化时执行')
    test = A()		#实例化类
    test.fun()	#调用方法
    test.x		#调用属性
    

    下面是结果:

    Traceback (most recent call last):
    实例化时执行
    这是方法
    AttributeError: 'A' object has no attribute 'x'
    

    可以看到此时父类的方法继承成功,可以使用,但是父类的属性却未继承,并不能用

    测试二

    我们尝试下面代码,没有super().__init__()时调用A的父类Root的属性和方法(方法里对Root数据进行二次操作)

    class Root(object):
        def __init__(self):
            self.x= '这是属性'
    
        def fun(self):
        	print(self.x)
            print('这是方法')
            
    class A(Root):
        def __init__(self):
            print('实例化时执行')
    
    test = A()		#实例化类
    test.fun()	#调用方法
    test.x		#调用属性
    
    Traceback (most recent call last):
    AttributeError: 'A' object has no attribute 'x'
    

    可以看到此时报错和测试一相似,果然,还是不能用父类的属性

    测试三

    我们尝试下面代码,加入==super(=).init()==时调用A的父类Root的属性和方法(方法里对Root数据进行二次操作)

    class Root(object):
        def __init__(self):
            self.x = '这是属性'
    
        def fun(self):
            print(self.x)
            print('这是方法')
    
    
    class A(Root):
        def __init__(self):
            super().__init__()
            print('实例化时执行')
    
    
    test = A()  # 实例化类
    test.fun()  # 调用方法
    test.x  # 调用属性
    

    结果输出如下

    实例化时执行
    这是属性
    这是方法
    "这是属性"
    

    此时A已经成功继承了父类的属性,所以super().__init__()的作用也就显而易见了,就是执行父类的构造函数,使得我们能够调用父类的属性

    上面是单继承情况,我们也会遇到多继承情况,用法类似,但是相比另一种Root.__init__(self),在继承时会跳过重复继承,节省了资源。

    还有很多关于super的用法可以参考
    super的使用

    展开全文
  • super().__init__()用法

    千次阅读 2019-07-12 18:43:00
    优先阅读:这个是我这个菜鸟自己理解的,误导别人概不负责~哈哈哈哈哈哈哈 一、何时要使用super.__init__():  我理解是,当需要继承父类构造函数中的内容,且子类需要在父类的...这时就需要用到super().__init...

    优先阅读:这个是我这个菜鸟自己理解的,误导别人概不负责~哈哈哈哈哈哈哈

    一、何时要使用super.__init__():

      我理解是,当需要继承父类构造函数中的内容,且子类需要在父类的基础上补充时,使用super().__init__()方法。

    在这段代码中,New_person这个类即需要用到父类中name和age,又需要新增sex这个参数。这时就需要用到super().__init__()来继承父类中的name,和age。super().__init__()其实就是一个调用父类中__init__的函数。由于父类中的init有两个参数,所以super().__init__()也要传两个参数。

    通过子类中的__init__函数获取到传的参数,并传给父类,如图中的传值关系。

    当父类中的参数带有默认值时,super().__init__()调用父类中__init__也可以不传值(或传self),由于传值时self是可以省略的,所以写或不写结果是一样的。self在子类中代表子类本身,把self传到super().__init__()函数中,代表子类的__init__函数中的内容传给了父类。

    只不过是通过子类中重写后传到父类中的。既然已经在子类中重写了self.name 、self.age、self.sex,那再调用super().__init__()函数就是多此一举了。即使把super().__init__()这句代码删掉也是没有影响的。

    总之super().__init__()是为了继承父类中的__init__,继承后如果再子类中又重写那我觉得就是白继承了。。。

    源码在此,可以自己修改感受一下:

    class Person():
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def name1(self,name):          #定义方法名时不要和变量名一样,否则在调用的时候可能会报错。
            print('方法中名字 %s'%name)
            print('类中的名字 %s'%self.name)
        def age1(self,age):
            print('方法中的年龄 %s' %age)
            print('类中的年龄 %s' %self.age)
    class New_person(Person):
        def __init__(self,new_name,new_age,sex):
            super().__init__(new_name,new_age)
            self.sex=sex
        def diaoyong(self,name,age):
            self.name1(name)
            self.age1(age)
        def sex1(self,sex):
            print('方法中的性别 %s' %sex)
            print('类中的性别 %s' %self.age)
    new_p=New_person('小花','20','')
    new_p.diaoyong('小米','15')
    new_p.sex1('')
    # new_p.name1('xiaohua')

     PS:还有就是,如果super().__init__()中,获取了子类中传的值,继承了父类。但是子类的__init__方法中,又把数据重写了,那再调用的时候,还是优先调用子类本身的值,如下图:

     

    转载于:https://www.cnblogs.com/hancece/p/11177852.html

    展开全文
  • 关于继承和super的使用本文做以下解释,方便新手理解编程用法。 引言 在面向对象编程中,你编写表示现实世界中的事情和情景的的类,并基于这些类来创建对象。编写类时,你定义一大类对象都有通用行为。基于类创建...

    关于继承和super的使用本文做以下解释,方便新手理解编程用法。

    引言

    在面向对象编程中,你编写表示现实世界中的事情和情景的的类,并基于这些类来创建对象。编写类时,你定义一大类对象都有通用行为。基于类创建对象时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性。
    Python编写类时,并非总要从空白开始。如果你编写的类是另一个现成类的特殊版本,可使用继承。一个类继承另一个类,它将自动获得另一个类的所有属性和方法;此外,子类在继承父类的属性和方法的同时,还可以定义自己的属性和方法。

    super的使用

    super是一个特殊函数,能够将父类和子类关联起来。

    1. 子类继承父类,但不重写构造函数__init__(初始化),那么子类会自动继承父类属性和方法
    class Person:
            def __init__(self):
                    self.name = 'name'
                    self.age = 'age'
            def Hello(self):
                    print("成功继承父类方法")
    		
    class Gao(Person):
            pass
    
    p = Person()
    g = Gao()
    print('父类属性:',p.name)
    print('父类属性:',p.age)
    print('继承父类属性:',g.name)
    print('继承父类属性:',g.age)
    g.Hello()
    
    输出结果:
    父类属性: name
    父类属性: age
    继承父类属性: name
    继承父类属性: age
    成功继承父类方法
    
    1. 子类继承父类,重写构造函数__init__(初始化),但不使用super初始化父类构造函数,那么子类不会自动继承父类的属性,会继承方法
    class Person:
            def __init__(self):
                    self.name = 'name'
                    self.age = 'age'
            def Hello(self):
                    print("成功继承父类方法")
    		
    class Gao(Person):
            def __init__(self):
                    self.height = 'height'
    
    p = Person()
    g = Gao()
    g.Hello()
    print('父类属性:',p.name)
    print('父类属性:',p.age)
    print('子类属性:',g.height)
    print('继承父类属性:',g.age)
    
    输出结果:
    成功继承父类方法
    父类属性: name
    父类属性: age
    子类属性: height
    Traceback (most recent call last):
      File "person.py", line 187, in <module>
        print('继承父类属性:',g.age)
    AttributeError: 'Gao' object has no attribute 'age'
    
    1. 子类继承父类,重写构造函数__init__(初始化),且使用super初始化父类构造函数,那么子类会自动继承父类的属性和方法
    class Person:
            def __init__(self):
                    self.name = 'name'
                    self.age = 'age'
            def Hello(self):
                    print("成功继承父类方法")
    		
    class Gao(Person):
            def __init__(self):
                    super().__init__()
                    self.height = 'height'
    
    p = Person()
    g = Gao()
    g.Hello()
    print('父类属性:',p.name)
    print('父类属性:',p.age)
    print('子类属性:',g.height)
    print('继承父类属性:',g.age)
    
    输出结果:
    成功继承父类方法
    父类属性: name
    父类属性: age
    子类属性: height
    继承父类属性: age
    

    参考《Python编程从入门到实践》

    展开全文
  • 好文不应该被埋没,应该被更多的人所熟知!!! ...相信大家在很多场合特别是写神经网络的代码的时候都看到过下面的这种代码: import torch import torch.nn as nn ... def __init__(self): super(Net
  • class Grand_father(object): def __init__(self): print('爷爷') class Father_left(Grand_father): ... super().__init__() print('左边爸爸') class Father_right(): def __init__(self): ...
  • 相信大家在很多场合特别是写神经网络的代码的时候都看到过下面的这种代码: import torch ... super(Net, self).__init__() # 输入图像channel:1;输出channel:6;5x5卷积核 self.conv1 = nn.C
  • 在使用tensorFlow2搭建神经网络模型的时候,除了Sequential的方法,还有就是自己写模型class,然后初始化。自己写模型类的优势就是可以自定义层与层之间的连接关系,自定义... super(IrisModel, self).__init__() s
  • Python—子类构造函数调用super().__init__()

    万次阅读 多人点赞 2018-10-15 19:25:22
    如果子类(Puple_Init)继承父类(Person)做了初始化,且不调用super初始化父类构造函数,那么子类(Puple_Init)不会自动继承父类的属性(name)。 如果子类(Puple_super)继承父类(Person)做了初始化,且调用了super初始...
  • super().init()方法是当我们需要继承父类构造函数中的内容,并且子类需要有所补充的时候使用。例如 class Person(object): """人""" def __init__(self, name, age): self._name = name self._age = age 当我们...
  • python super().__init__()

    千次阅读 2020-02-19 21:38:18
    子类构造函数调用super().init()的时候,会从父类继承属性。 三种构造函数的区别: 当子类不做初始化的时候,会自动继承父类的属性 当子类做初始化(子类中包含新的属性)的时候,子类不会自动继承父类的属性 当...
  • 如果你在Dict类中定义了__init__方法,则可以使用super(Dict, self).__init__(**kw)来调用父类的__init__方法 放在python2就报错了,不兼容接口。 python2写法: super( test, self).init(p...
  • super(XXX, self).__init__()在类中的作用

    千次阅读 2020-05-19 10:56:42
    这是对继承自父类的属性进行初始化,而且是用父类的初始化方法来初始化继承的属性.也就是说,子类继承了父类的所有属性和方法, ... super(EfficientDetBackbone, self).__init__() 比如上例中,先找到 Eff
  • 语法格式:super(子类,self).__init__(参数1,参数2,…) 效果等同于:父类名称.__init__(self,参数1,参数2,…) ''' 如飞机大战常用的: # pygame.sprite.Sprite.__init__(self) #调用父类的初始方法 super...
  • Python中的super().__init__

    千次阅读 2019-10-20 18:10:33
    首先,super().__init__是Python中调用父类构造方法的语句,他有以下情况: 当Python中一个子类继承父类: 如果不对子类初始化,那么他将自动调用父类的构造方法 class TestA(): def __init__(self): print('A')...
  • super(Net, self).__init__()

    万次阅读 多人点赞 2020-02-22 11:07:09
    最近在用pyqt编写桌面应用。发现一个比较拗口的语法点: class mywindow(QtWidgets.QMainWindow, Ui_MainWindow): ... super(mywindow, self).__init__() self.setupUi(self) # 定义槽函数 def he...
  • class Root(): y = 'zhege' def __init__(self): self.x = '这是属性' def fun(self): # print(self.x) self.z = '这是fun下的属性' print('这是方法') ... # super(A,self).__init__() .
  • https://blog.csdn.net/zyh19980527/article/details/107206483/
  • super(Net,self).__init__() 的含义

    千次阅读 2020-06-20 03:09:40
    super(Net,self).__init__() python中的super(Net, self).init() 首先找到Net的父类(比如是类nn.Module),然后把类Net的对象self转换为类nn.Module的对象,然后“被转换”的类nn.Module对象调用自己的init函数 ...
  • A被执行多次 class A: def __init__(self): print 'A' class B(A): def __init__(self): print 'B' A.__init__(self) ...
  • def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) ###will error,if me add args param super().__init__(*args, **kwargs) self.a = args[0] 这么写会报...
  • super().__init__()方法

    2019-07-11 02:26:00
    class first(object): def __init__(self,age,name): self.age = age self.name = name class second(first): def __init__(self, age, name, sex): super().__ini...
  • super(ReflectionNetwork, self).__init__() self.model = model super(ReflectionNetwork, self).init(): 首先找到Net的父类(比如是类nn.Module),然后把类Net的对象self转换为类nn.Module的对象,然后“被...
  • python中的super( test, self).__init__()  对继承自父类的属性进行初始化 首先找到test的父类(比如是类A),然后把类test的对象self转换为类A的对象,然后“被转换”的类A对象调用自己的__init__函数
  • class Person(object): def __init__(self, name, gender, age): self.name = name.upper() self.gender = gender.upper() self.age = age class Student(Person): def __init__(...
  • super(XXXX,self).__init__()在类中的作用

    千次阅读 2020-02-02 09:37:33
    这是对继承自父类的属性进行初始化。而且是用父类的初始化方法来初始化继承的属性。 也就是说,子类继承了父类的所有属性和方法,父类属性自然会用父类方法来进行初始化。 当然,如果初始化的逻辑与父类的不同,不...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 387,854
精华内容 155,141
关键字:

super().__init__()