精华内容
下载资源
问答
  • python重写父类方法

    千次阅读 2019-03-15 17:58:53
    环境 python版本:3.6 ...1 不改变父类方法参数只重写方法内容 class fa(): @classmethod def cat(cls, age): print('age is %s'%age) class ch(fa): @classmethod def cat(cls, age): su...

    环境

    • python版本:3.6
    • pycharm版本:2017

    1 不改变父类方法参数只重写方法内容

    class fa():
        @classmethod
        def cat(cls, age):
            print('age is %s'%age)
    
    class ch(fa):
        @classmethod
        def cat(cls, age):
            super(ch, cls).cat(age)
            print('so it is')
            
    ch.cat(12)
    

    输出

    >>> age is 12
    >>> so it is
    

    2 改变父类方法参数并重写方法内容

    class fa():
        @classmethod
        def cat(cls, age):
            print('age is %s'%age)
    
    class ch2(fa):
        @classmethod
        def cat(cls, age, name):
            super(ch2, cls).cat(age)
            print('name is %s'%name)
    ch2.cat(12, 'muscle')
    

    输出

    age is 12
    name is muscle
    

    直接添加参数,重写父类方法虽然也能正常使用,但是在pycharm里有警告提示:
    在这里插入图片描述

    警告信息:Signature of method ‘ch2.cat()’ does not match signature of base method in class ‘fa’
    This inspection detects inconsistencies in overriding method signatures.
    参考链接:https://stackoverflow.com/questions/6034662/python-method-overriding-does-signature-matter

    由于增加了参数,从而改变了同父类方法的一致性违反了LSP原则(在使用父类的场景,替换为子类也一样可行)。解决方式为,在子类重写的方法中为参数里添加默认值赋值,这样就确保了父类方法中定义的参数在子类中一定不会失效从而确保了自上而下的一致性。eg:

    class ch2(fa):
        @classmethod
        def cat(cls, age = None, name = None):
            super(ch2, cls).cat(age)
            print('name is %s'%name)
    
    展开全文
  • Python 重写父类方法

    2019-12-19 15:55:25
    父类方法不能满足子类的需要,那么子类就可以重写或者完善父类方法。 例如: ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习...

    python继承中,如果子类在调用某个方法时,它首先是从派生类(也就是当前类)中去找对应的方法,如果当前类中找不到对应的方法,就会去基类(派生类)中去逐个查找。

    若父类的方法不能满足子类的需要,那么子类就可以重写或者完善父类的方法。

    例如:

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    # coding=utf-8
    class Father():
        def smile(self):
            print('哈哈哈')
    
    class Son(Father):
        def smile(self):   #重写父类的方法
            Father().smile()  #调用了父类,这种属于在父类的基础上完善父类的方法,若不调用父类的smile()方法就属于完全舍弃父类的此功能来重写这个方法
            super(Son,self).smile()#这个是自动找到父类中的smile方法,如果继承了多个父类,那么会按照继承的父类的顺序去一个一个找
            print('呵呵呵')
    s= Son()
    s.smile()
    

    如果继承了多个父类,多个父类中都有子类要重写完善的方法,那么可以使用上面的Father().smile()调用,也可以使用一个逼格较高的super来调用,super会从继承的父类里一个一个去找,先在哪个类里找到就继承哪个类里的该方法。代码如下:

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    # coding=utf-8
    class Zll():
        # def smile(self):
        #     print('哈哈哈')class Dcg():
        def smile(self):
            print('啊啊啊啊啊')
    
    class Lw():
        def smile(self):
            print('嘿嘿嘿')
    
    class Xz(Zll,Dcg,Lw):
        def smile(self):   #重写父类的方法
            # Dcg().smile()  #调用了父类
            # super(Xz,self).smile()  #这个自动帮你找到父类的,如果这样写会按继承顺序,Zll、Dcg、Lwy一个一个去找,先在哪个类中找到就先使用哪个类里的smile方法
            print('呵呵呵')
    x = Xz()
    x.smile()
    
    展开全文
  • python 重写父类方法(override) https://blog.csdn.net/weixin_42982616/article/details/86835461

    python 重写父类方法(override)

    https://blog.csdn.net/weixin_42982616/article/details/86835461

     

     

     

     

    展开全文
  • 重写父类方法 所谓重写,就是子类中,有一个和父类相同名字的方法,在子类中的方法会覆盖掉父类中同名的方法 class Cat(object): def sayHello(self): print("halou-----1") class Bosi(Cat): def sayHello...

    重写父类方法

    所谓重写,就是子类中,有一个和父类相同名字的方法,在子类中的方法会覆盖掉父类中同名的方法

    class Cat(object):
        def sayHello(self):
            print("halou-----1")
    
    
    class Bosi(Cat):
    
        def sayHello(self):
            print("halou-----2")
    
    bosi = Bosi()
    
    bosi.sayHello()
    

    调用父类的方法

    class Cat(object):
        def __init__(self,name):
            self.name = name
            self.color = 'yellow'
    
    
    class Bosi(Cat):
    
        def __init__(self,name):
            # 调用父类的__init__方法1(python2)
            #Cat.__init__(self,name)
            # 调用父类的__init__方法2
            #super(Bosi,self).__init__(name)
            # 调用父类的__init__方法3
            super().__init__(name)
    
        def getName(self):
            return self.name
    
    bosi = Bosi('xiaohua')
    
    print(bosi.name)
    print(bosi.color)
    

    展开全文
  • 那么,在这种情况下如何才能调用被覆盖的父类方法呢? 解决方案 此时若想调用父类中的方法,有两种方案可以达成。 1.调用未绑定的父类方法 2.使用super函数,也就是我们今天要讲的重点 实例说明 举个例子,首先来看...
  • class Liar(list): def __len__(self): return super().__len__() + 3 # 直接写 super().__len__() 而没有 return 不会返回 length ! a = Liar(['a','b'])
  • python重写父类方法

    2020-08-14 22:08:38
    对于父类方法,只要他不符合子类模拟的实物的行为,都可对其进行重写????为此,可在子类中定义一个这样的方法父类方法同名,python将只关注子类中定义的方法
  • python重写父类方法

    2018-08-28 08:37:53
    python重写父类方法 修改父类的方法重写父类的方法的目的是为了给他扩展功能,父类的方法已经不能满足需求核心思想就一句话,先调用一下你要重写的父类方法, class Coon(object): #基本类 def __init__(self,...
  • 如果子类和父类都有构造函数,子类其实是重写父类的构造函数,如果不显式调用父类构造函数,父类的构造函数就不会被执行,导致子类实例访问父类初始化方法中初始的变量就会出现问题。 参考 ...
  • 1. 重写父类方法 所谓重写,就是子类中,有一个和父类相同名字的方法,在子类中的方法会覆盖掉父类中同名的方法 #coding=utf-8 class Cat(object): def sayHello(self): print("halou-----1") class Bosi(Cat): ...
  • 重写父类的__init__方法方法1:调用父类的__init__(python2) 父类名.__init__(self,重写的属性) 方法2:调用父类的__init__ super(子类名,self).__init__(重写的属性) 方法3: 调用父类的__init__ super...
  • python 子类重写父类方法

    千次阅读 2019-09-03 20:51:57
    子类拓展了父类,子类是一种特殊的父类,大部分时候,子类总是以父类为基础,额外增加新的方法,但有一种情况例外,子类需要重写父类方法,见代码: class Animal: def eat(self): print('kkkkkk') class ...
  • 重写父类方法,调用父类的方法 class Chickensoup(object): def init(self): self.name=‘飘香鸡秘方’ def cookstyle(self): print('此处是爷爷的做法') print('加两斤的鸡,20g的盐,3斤水,熬成一锅') class ...
  • 6.8.1 重写父类方法 所谓重写,就是子类中,有一个和父类相同名字的方法,在子类中的方法会覆盖掉父类中同名的方法 #coding=utf-8 class Cat(object): def sayHello(self): print("halou-----1") class Bosi(Cat)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,310
精华内容 524
关键字:

python重写父类方法

python 订阅