精华内容
下载资源
问答
  • 问题 子类如果重写了父类的方法,就会把父类的方法覆盖。...2.使用super函数,也就是我们今天要讲的重点 实例说明 举个例子,首先来看一下代码 class Fish: def _init_(self): #坐标取0到10之间的随机数 ...

    问题

    子类如果重写了父类的方法,就会把父类的方法覆盖。那么,在这种情况下如何才能调用被覆盖的父类方法呢?

    解决方案

    此时若想调用父类中的方法,有两种方案可以达成。

    1.调用未绑定的父类方法

    2.使用super函数,也就是我们今天要讲的重点

    实例说明

    举个例子,首先来看一下代码

    class Fish:
    	def _init_(self):
            #坐标取0到10之间的随机数
            self.x = r.randint(0,10)
            self.y = r.randint(0,10)
         def move(self):
            self.x -= 1
            print("我的位置是:",self.x,self.y)
    
    #Shark类继承自Fish类 
    class Shark(Fish)def _init_(self):
            self.hungry = True
            
        def eat(self):
            if self.hungry:
                print("吃货的梦想就是天天有的吃^_^"")
                self.hungry = False   
             else:
                print("太撑了,吃不下了")      
    

    可以看到此时代码中子类Shark重写了父类Fish中的初始化方法,那么move方法就应该可以正常继承过来,但是当运行shark.move()时也会报错(这里shark是Shark类的实例)。这是为什么呢?

    其实是因为move方法中包含x变量,由于覆盖了父类中的初始化方法,Shark类初始化时没有x变量而导致的。

    好了,下面就是解决方案的实例

    • 调用未绑定的父类方法

    在Shark类的初始化方法中多加一行Fish._init_(self)即可。如下所示。

    def _init_(self)
    	Fish._init_(self)
        self.hungry = True
    

    Fish._init_(self)括号中的self为子类Shark的实例对象,并没有绑定父类,所以叫它是未绑定的父类方法。

    • 使用super函数

    在Shark类的初始化方法中多加一行super()._init_()即可,连self参数都可以不用传入。如下所示。

    def _init_(self)
    	super()._init_()
        self.hungry = True
    

    总结

    这两种方法中,相较之下,super函数更好用

    super函数可以自动帮我们找到基类的方法,并且会为我们传入self参数。

    super函数超级之处,就是在于不用给定任何基类的名字,在多重继承时,可以自动帮你一层层找出所有基类里面对应的方法。

    由于不用给定任何基类的名字,所以在需要改变类的继承关系时,只需要修改括号里父类的名字就可以了。

    补充一句:多重继承(一个类同时继承多个类)容易导致代码混乱,当不确定必须要使用多重继承的语法时,请尽量避免使用它。

    展开全文
  • 刚接触Python语言的时间不长,对于这个语言的很多特性并不是很了解,有很多用法都是还不知道。今天想着写一个Python面向对象编程时的继承中的函数调用。分享出来,一起进步

    刚接触Python语言的时间不长,对于这个语言的很多特性并不是很了解,有很多用法都是还不知道。今天想着写一个Python面向对象编程时的继承中的函数调用。分享出来,一起进步。

    因为之前接触过Java和C++,所有对于面向对象的思想也早已经很熟析的了。这里也不再对面向对象是什么进行赘述了。我们直接上代码吧!看看对于继承和基类函数的调用在Python中是如何调用的~

    首先,是基类文件base.py

    '''
    Created on Dec 18, 2014
    
    @author: raul
    '''
    
    class animal(object):
        '''
        classdocs
        '''
    
    
        def __init__(self):
            '''
            Constructor
            '''
            print 'animal init'
            
        def say(self):
            print 'animal say'

    然后,是子类文件child.py

    '''
    Created on Dec 18, 2014
    
    @author: raul
    '''
    from inheritance.base import animal
    
    class cat(animal):
        '''
        classdocs
        '''
    
    
        def __init__(self):
            '''
            Constructor
            '''
    #         animal.__init__()
            animal.__init__(self)
            print 'cat init'
            
        def say(self):
            animal.say(self)
            print 'cat say'
    
    
    if __name__ == '__main__':
        c = cat()
        c.say()
        

    运行后,就可以看到输出,如下:

    animal init
    cat init
    animal say
    cat say
    

    这就说明,我们的继承和函数的调用都已经OK了

    展开全文
  • 子类不重载、覆盖父类的构造函数(子类不自己定义构造函数),则构造子类时会调用父类构造函数 若子类覆盖了父类的构造函数,则构造子类时不执行父类的构造函数,但仍继承了父类,如需调用父类构造函数则使用:...

    Python:

        子类不重载、覆盖父类的构造函数(子类不自己定义构造函数),则构造子类时会调用父类构造函数

        若子类覆盖了父类的构造函数,则构造子类时不执行父类的构造函数,但仍继承了父类,如需调用父类构造函数则使用:Parent.__init__(self)或super(Child,self).__init__()

     

    JAVA:

        如果子类没有显示调用父类则自动调用父类默认(无参数)构造函数。

        如果父类没有无参数构造函数,且子类构造函数中未显示调用父类其他构造函数,则报错

    转载于:https://www.cnblogs.com/chengxuyuandashu/p/3585859.html

    展开全文
  • python不支持重载函数

    千次阅读 2013-04-26 19:46:01
    注意,python是动态编程语言,因此没有重载这个概念。这是因为形参没有类型定义, 同名函数一旦定义,后者会覆盖前着,也就是说:最后一次定义有效  1 import os  2  3  4 def tt(sa,sb):  5 return ...

    注意,python是动态编程语言,因此没有重载这个概念。这是因为形参没有类型定义,

    同名函数一旦定义,后者会覆盖前着,也就是说:最后一次定义有效

      1 import os
      2
      3
      4 def tt(sa,sb):
      5     return sa+sb
      6
      7 def tt(sa,sb,sc):
      8     return sa-sb+sc
      9
     10
     11 if __name__=="__main__":
     12     print "this is a test on 10.58.254.50 for ssh!"
     13     num="465464"
     14     num2= "num254461"
     15     fo = open('/home/mingjian/work/resulttmp.txt','w')
     16     try:
     17        fo.write(num)
     18     finally:
     19         fo.close()
     20     print tt(1,2,3)
     21     print tt(3,4)

    最后一行报错,参数不符合。

    另外引用了一点评论凑个字数http://www.cnblogs.com/maodouzi/archive/2010/05/18/1738224.html

    1. Python是动态类型语言,不能简单地说它支持或者不支持重载,我的思考结果是,重载仍然存在,只是以不同的方式呈现。原来我们理解的重载,都是在静态类型语言中,关心参数个数以及参数类型;在动态类型语言里的重载根本不需要关心参数类型,只需要关心参数个数。而在Python里,关心参数个数的重载是由默认参数和传递参数名称来实现的。这样,程序员就没有必要自己来写两个名称一样而参数不同的函数了!事实上,在同一个模块或者同一个类中,写两个名称相同的方法的时候(参数个数是否相同不重要),后面的那个方法会简单覆盖前面的方面;其次,在子类继承父类时,同名(不同参)的方法也会简单覆盖(子类覆盖父类)。但是,这不说明Python没有重载,它只是不需要程序员自己来实现重载(如果说程序员还需要做什么的话,那就仅仅是要定义默认参数和参数名称)。如果你需要重载的话,”默认参数+参数名传递“就能达到你想要的重载了!
    2. 有贴子会说,默认参数和重载是两回事,但是我觉得,C++里不允许同时定义默认参数和重载函数是有道理的,Java里干脆取消默认参数,只有重载方法也是有道理的,这个道理,就是”默认参数和基于参数个数的重载是一回事“。只是默认参数太不好控制了,特别是遇到中间一个参数是默认参数的情况,Python提供的解决办法是:参数名传递!好牛叉的思想,呵呵,从这些小细节开始喜欢Python。别具一格,又把问题解决的如此完美,这就是处处为程序员着想的Python!

     

    展开全文
  • python函数重载和重写

    千次阅读 2020-08-12 16:28:45
    python是一门动态语言,不需要声明变量类型,函数中可以接受任何类型的参数也就无法根据参数类型来支持重载python没有必要去考虑参数的类型问题,这些都可以在函数内部判断处理,并无必要去在写一个函数python ...
  • 直接看代码:classPerson:def __init__(self):self.name= "jack"classStudent(Person):def __init__(self):self.school= "一中"stu=Student()print("学生的姓名是:",stu.name)...__init__相当于是python类的构造方...
  • 如果子类中重载父类中的函数,该函数在子类调用是时会修改,不管是否在父类的函数中调用,如下 class parent: def __init__(self): self.o = 'dafda' def pp(self): print('pppp') def dd...
  • 内建函数,一般都是因为使用频率比较频繁或是是元操作,所以通过内置函数的形式提供出来,通过对python的内置函数分类分析可以看出来:基本的数据操作基本都是一些数学运算(当然除了加减乘除)、逻辑操作、集合操作...
  • Python是面向对象的编程语言。在类的继承体系中,子类可以继承父类的public或protected的方法。 方法的重载,是指在子类中重新定义(即实现)与父类同名的方法。
  • Python内置函数

    千次阅读 多人点赞 2019-05-10 15:10:36
    Python内置函数Python abs()函数Python all() 函数Python any() 函数Python basestring() 函数Python bin() 函数Python bool() 函数Python bytearray() 函数Python callable() 函数Python chr() 函数Python ...
  • 通过一个小程序实验了Python父类和子类的一些性质,直接上代码: # -*- coding: UTF-8 -*- class ParentClass: def __init__(self): self.start() def start(self): print "parent method" def count...
  • 重载(overload)和覆盖(override),在C++,Java,C#等静态类型语言类型语言中,这两个概念同时存在。... Python是动态类型语言,不能简单地说它支持或者不支持重载,我的思考结果是,重载仍然存在,只是以不同...
  • 今天遇到了这样一个问题,通过重载方法来设置不同的字段值, 而这个设置方法对于类外部来说...结果在调用的时候,始终调用的是父类的方法而不是子类重载的方法, 如下例: class A(): def __init__(self): ...
  • python3.9.5内置函数教程

    多人点赞 热门讨论 2021-05-01 17:22:29
    # `abs()`函数 ## 功能 传入不同的数据类型的参数,`abs()`实现的功能不同:
  • python 子类重写父类的方法

    万次阅读 2019-09-03 20:51:57
    子类拓展了父类,子类是一种特殊的父类,大部分时候,子类总是以父类为基础,额外增加新的方法,但有一种情况例外,子类需要重写父类的方法,见代码: class Animal: def eat(self): print('kkkkkk') class ...
  • python重载和多态问题

    2017-07-07 18:47:18
    python不像java,c++等面向对象一样存在着多态和重载的问题,在python中用缺省参数很好的实现了多态和重载,在python中只存在着重写 一.多态的实现 class Student(object): def __init__(self,name=None,age=None...
  • python的回调函数和构造重载

    千次阅读 2010-05-25 11:26:00
    背景:这个项目遇到的问题是,内部模块发生的事情要在PyQt构建的界面上表现出来,但是内部模块不能调用Qt类的... 先说构造重载,python中,只有继承的类可以重载父类的构造,一个类就不能这么做了,第二次声明的构造直
  • 为什么构造函数确实被称为“构造函数”? 它们的目的是什么,它们与类中的方法有什么不同? 另外,还能有更多的吗? __init__在课堂上? 我试了以下几种方法,谁能解释一下结果吗? >>> class test: def __...
  • Python3内置函数学习(五) 文章目录Python3内置函数学习(五)setsetattrslice()sorted()staticmethod()str()sum()super()tuple()type()vars()zip()__import__ () set 语法 set([iterable]) 返回一个新的 set 对象/新...
  • Python基础4 函数、模块和对象

    千次阅读 2016-07-22 09:57:06
    Python 学习笔记二 函数、模块和对象定义函数def printme( str ): "打印传入的字符串到标准显示设备上" print str return调用:printme("测试一下怎么样")传参所有参数(自变量)在Python里都是按引用传递。参数 ...
  • 在考虑为什么Python不提供函数重载前,我们要研究为什么需要提供函数重载。 在静态语言中,方法重载是希望类可以以统一的方式处理不同类型的数据提供可能性。多个同名函数同时存在 函数重载主要解决两个问题: 可变...
  • 全文来自:IT工程技术网 http://www.systhinker.com/html/91/n-11591.html 昨天和飞天舞者讨论静态类型语言和动态类型语言优劣比较的时候,说到Python没有重载机制的问题。后来想想挺有意思的,把思考的经过记录...
  • 主要就是根据自己的理解翻译了部分...__new__是一个静态函数。他的第一个参数是要创建的对象的类。剩下的参数传递给对象的构造表达式(构造表达式就是...
  • 本文实例讲述了Python基础学习之函数方法。分享给大家供大家参考,具体如下:前言与其他编程语言一样,函数(或者方法)是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。python函数具有非常高的灵活...
  • Python基础-函数参数

    2017-06-30 19:05:57
    本文详细介绍了函数的各种形参类型,包括位置参数,默认参数值,关键字参数,任意参数列表,命名关键字参数;也介绍了调用函数时传递实参的各种方式,包括位置实参,关键字实参以及使用\*和\**来解包序列和字典。
  • python的继承中,基类的私有函数不能被重载例子下图是私有函数重载
  • 重载和重写,这是两个新概念,是两个令我们容易混淆的...函数重载主要是为了解决两个问题。1.可变参数类型。2.可变参数个数。 另外,一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,825
精华内容 3,530
关键字:

python重载父类的函数

python 订阅