精华内容
下载资源
问答
  • 2021-09-06 13:32:05

    class Person(object): def init(self, name, age): self.name = name self.age = age

    def driver(self):
        print('开车太好玩了 ,10迈,太快了')

    class Father(Person): # 如果我们现在想在原有父类方法基础上扩展,例如我们现在需要重写一个init方法 # 可以接收 name, age ,gender三个属性 def init(self, name, age, gender): # 在父类方法中已经添加了name,和age我们可不可以直接使用呢??? super().init(name, age) # 在父类方法的基础上我们在添加一个子类方法独有的功能 self.gender = gender

    def driver(self):
        print('我要去天安门完,开挖掘机不让我进')
    ​
    def __str__(self):
        return f'我的姓名是{self.name},我的年龄是{self.age},我的性别是{self.gender}'

    class Son(Father): def driver(self): # 调用Person中的dirver # TypeError: driver() missing 1 required positional argument: 'self' # Person.driver() Person.driver(self) # Monkey.driver(Monkey()) # 从Father类的上一级类开始查找方法,并进行调用 super(Father,self).driver()

        # 调用Father中的dirver
        super().driver()
        # 格式:super(从哪个类的上一级开始查找,self).方法名()
        # 如果类名是当前类,可以省略括号内的内容
        super(Son, self).driver()
        # 书写特有功能

    所有的参数都传递到了Father类中,并且添加为当前对象的属性

    print(Father('Jack', 28, '男')) s1 =Son('xiaoming', 12, '男') s1.driver()

    子类中调用父类方法的三种方式:

    super().方法名() # 只能调用当前类的上一级类中的方法或函数

    类名.方法名(self) # 所使用的类名,必须在当前类的继承关系中

    super(要从哪一个类的上级类开始查询,self).方法名() # 类名必须在继承关系内,如果类名是当前所在的类,则可以将括号内内容省略,就是第一中方式

    class Monkey(object):

    def driver(self):

    print('我在骑自行车')

    #

    m1 = Monkey()

    # 如果使用实例调用实例方法,可以自动将对象传入方法

    m1.driver()

    # 如果使用类调用实例方法,需要手动传递实例到方法内

    Monkey.driver(m1)

    更多相关内容
  • Python在子类中调用父类方法

    千次阅读 2021-08-07 20:17:17
    子类调用父类方法时,一般都是想对父类方法进行扩展 class Person(object): def __init__(self, name, age): self.name = name self.age = age def driver(self): print('开车太好玩了 ,10迈

    1、在子类中调用父类方法

    • super().方法名()
    • 类名.方法名(self)
    • spuer(要从哪一个类的上一级类开始查找, self).方法名()
    • 子类调用父类方法时,一般都是想对父类方法进行扩展
    class Person(object):
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def driver(self):
            print('开车太好玩了 ,10迈,太快了')
    
    
    class Father(Person):
        # 如果我们现在想在原有父类方法基础上扩展,例如我们现在需要重写一个init方法
        # 可以接收 name, age ,gender三个属性
        def __init__(self, name, age, gender):
            # 在父类方法中已经添加了name,和age我们可不可以直接使用呢???
            super().__init__(name, age)
            # 在父类方法的基础上我们在添加一个子类方法独有的功能
            self.gender = gender
    
        def driver(self):
            print('我要去天安门完,开挖掘机不让我进')
    
        def __str__(self):
            return f'我的姓名是{self.name},我的年龄是{self.age},我的性别是{self.gender}'
    
    class Son(Father):
        def driver(self):
            # 调用Person中的dirver
            # TypeError: driver() missing 1 required positional argument: 'self'
            # Person.driver()
            Person.driver(self)
            # 从Father类的上一级类开始查找方法,并进行调用
            super(Father,self).driver()
    
            # 调用Father中的dirver
            super().driver()
            # 格式:super(从哪个类的上一级开始查找,self).方法名()
            # 如果类名是当前类,可以省略括号内的内容
            super(Son, self).driver()
            # 书写特有功能
    
    
    # 所有的参数都传递到了Father类中,并且添加为当前对象的属性
    print(Father('Jack', 28, '男'))
    s1 =Son('xiaoming', 12, '男')
    s1.driver()
    
    # 子类中调用父类方法的三种方式:
    # super().方法名()   # 只能调用当前类的上一级类中的方法或函数
    # 类名.方法名(self)  # 所使用的类名,必须在当前类的继承关系中  这种方法可以调用不在类中的类方法,但是不能使用self作为对象出现
    # super(要从哪一个类的上级类开始查询,self).方法名()  # 类名必须在继承关系内,如果类名是当前所在的类,则可以将括号内内容省略,就是第一中方式
    

    展开全文
  • 本文实例讲述了Python实现子类调用父类方法。分享给大家供大家参考。具体实现方法如下: python和其他面向对象语言类似,每个类可以拥有一个或者多个父类,它们从父类那里继承了属性和方法。如果一个方法在子类的...
  • 本篇文章里小编给大家整理了关于java子类调用父类方法中包含子类重写的实例方法以及相关知识点,需要的朋友们可以学习下。
  • php实现在子类中调用父类方法,这个和平常的调用父类是不一样的,希望你们能有收获
  • 本文实例讲述了C#实现子类调用父类方法,分享给大家供大家参考之用。具体方法如下: 一、通过子类无参构造函数创建子类实例 创建父类Person和子类Student。 public class Person { public Person() { ...
  • 主要介绍了C++类继承之子类调用父类的构造函数的实例详解的相关资料,希望通过本文大家能够掌握C++类继承的相关知识,需要的朋友可以参考下
  • 主要介绍了Java父类调用子类方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 如果子类没有定义构造方法,则调用父类的无参数的构造方法。  2. 如果子类定义了构造方法,不论是无参数还是带参数,创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。  3. ...
  • 本文主要给大家介绍了关于python子类调用父类函数的相关内容,Python中子类的__init__()函数会覆盖父类的函数,一些情况往往需要子类里调用父类函数。下面话不多说了,来一起看看详细的介绍: 如下例程里,??...
  • __init__(self, ...)可以将父类中的init中的属性重复调用,减少代码的重复class Vehicle:def __init__(self, name, speed, load, power):self.name = nameself.speed = speedself.load = loadself.power = powerdef...

    父类名 . __init__(self, ...)

    可以将父类中的init中的属性重复调用,减少代码的重复

    class Vehicle:

    def __init__(self, name, speed, load, power):

    self.name = name

    self.speed = speed

    self.load = load

    self.power = power

    def run(self):

    print('%s我开动啦'%self.name)

    class Subway(Vehicle):

    def __init__(self,name, speed, load, power,line):

    Vehicle.__init__(self, name, speed, load, power)

    self.line = line

    def show_info(self):

    print(self.name, self.line)

    line1 = Subway('郑州地铁', '30m/s','500','电', '1号')

    line1.show_info() #调用自身的方法

    line1.run() #调用父类中的类方法

    父类名 . 函数名(self)

    子类中调用父类中类方法的逻辑

    class Vehicle:

    def __init__(self, name, speed, load, power):

    self.name = name

    self.speed = speed

    self.load = load

    self.power = power

    def run(self):

    print('%s我开动啦'%self.name)

    class Subway(Vehicle):

    def __init__(self,name, speed, load, power,line):

    Vehicle.__init__(self, name, speed, load, power)

    self.line = line

    def show_info(self):

    print(self.name, self.line)

    def run(self):

    Vehicle.run(self) #加上这句,可以实现同名函数,调用父类中的逻辑

    print('%s我来自子类'%self.line)

    line1 = Subway('郑州地铁', '30m/s','500','电', '1号线')

    line1.show_info() #调用自身的方法

    line1.run()

    super 方法

    调用父类逻辑时,不用担心类名的变动

    class Vehicle:

    def __init__(self, name, speed, load, power):

    self.name = name

    self.speed = speed

    self.load = load

    self.power = power

    def run(self):

    print('%s我开动啦'%self.name)

    class Subway(Vehicle):

    def __init__(self,name, speed, load, power,line):

    # Vehicle.__init__(self, name, speed, load, power)

    super().__init__(name, speed, load, power) #super 方法,这样就不用担心类名被修改

    self.line = line

    def show_info(self):

    print(self.name, self.line)

    def run(self):

    # Vehicle.run(self) #加上这句,可以实现同名函数,调用父类中的逻辑

    super().run() #效果和上面代码一样,更适合

    print('%s我来自子类'%self.line)

    line1 = Subway('郑州地铁', '30m/s','500','电', '1号线')

    line1.show_info() #调用自身的方法

    line1.run() #调用父类中的类方法

    super().__init__(name, speed, load, power) 等同于:

    super(Subway, self).__init__(name, speed, load, power)

    展开全文
  • iOS-在子类中调用父类私有方法

    千次阅读 2021-12-17 16:33:46
    三方中在.h中声明的方法比较好重写,直接在子类里重写方法,如果需要重调父类原有方法可以用super直接调用。而一些私有方法并没有在.h中声明,这时我们也可以直接重写父类方法,但是相对于想要重调父类方法,就不能...

    https://www.jianshu.com/p/6171e6ec78a3
    三方中在.h中声明的方法比较好重写,直接在子类里重写方法,如果需要重调父类原有方法可以用super直接调用。而一些私有方法并没有在.h中声明,这时我们也可以直接重写父类方法,但是相对于想要重调父类方法,就不能用super直接调用来实现。这里super只是一个编译器修饰符,是一个指向父类标志,并不是对象的父类实例。所以你再用super调用父类的私有方法是没有作用的。这时我们有几种选择可以帮我们实现父类私有方法的调用。

    首先可以用Method Swizzling(方法交换)来帮我们实现,但是此方法会引起全局的方法指针交换,多人开发中如果没有交流好很容易出现一些纰漏等问题

    第二种方法是我们可以利用runtime的消息发送机制,为我们的对象调用其父类的私有方法。主要用到objc_msgSendSuper方法,但是直接调用是不安全的,因为你不能确定父类是否含有这个方法,所以在调用之前需要判断父类是否含有此方法,举个例子,代码如下:

    #import "Parent.h"
    
    @implementation Parent
    
    - (void)say {
        NSLog(@"我是父类的私有方法say");
    }
    
    @end
    
    #import "Children.h"
    #import <objc/message.h>
    
    @implementation Children
    
    - (void)say {
        if ([self containsSuperMethod:@"say"]) {
            struct objc_super super_obj;
            super_obj.receiver = self;
            super_obj.super_class = [Parent class];
            void (*say)(void *, SEL) = (void *)objc_msgSendSuper;
            say(&super_obj, sel_registerName("say"));
        }
    }
    
    - (BOOL)containsSuperMethod:(NSString *)methodName {
        unsigned int outCount = 0;
        Method *methods = class_copyMethodList([Parent class], &outCount);
        for (int i = 0; i < outCount; i++) {
            Method method = methods[i];
            SEL methodNameSEL = method_getName(method);
            if ([methodName isEqualToString:NSStringFromSelector(methodNameSEL)]) {
                free(methods);
                return YES;
            }
        }
        free(methods);
        return NO;
    }
    
    

    这个方法是利用遍历父类中的所有方法来判断是否包含某一方法,这样做其实也有一定的弊端,比如当这个父类方法很多时,而你又需要频繁调用此方法时就会引起不必要的消耗。如果父类包含此方法就直接利用objc_msgSendSuper发送消息就可以了,需要声明#import <objc/message.h>

    第三种是先获取父类方法,然后利用构建的方式来调用。判断父类是否包含此方法是根据构建出来的方法是否存在来判断的,相比于上一个方法减少了遍历的过程。例子代码如下:

    - (void)say {
        Method method = class_getInstanceMethod([Parent class], sel_registerName("say"));
        void (*super_func)(id,SEL) = (void *)method_getImplementation(method);
        if (super_func){
            super_func(self, sel_registerName("say"));
        }
    }
    

    if (super_func) 是判断父类是否包含的此方法,如果含有此方法则调用,否则不调用。

    参考:https://www.jianshu.com/p/6171e6ec78a3
    https://www.cnblogs.com/zbblog/p/12333073.html

    展开全文
  • Python在子类中调用父类方法super

    千次阅读 2019-07-25 19:25:27
    2、改进一下,在子类中调用父类的init方法 3、在子类里面也调用一下父类的run方法 4、super方法 调用父类方法 super的方法的好处是,当你的父类的名字改变之后,只需要Subway那里继承的名字改一下,...
  • 主要介绍了python 子类调用父类的构造函数实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 子类调用父类方法

    千次阅读 2021-01-12 19:09:51
    方式一子类调用父类方法,包含2形式的调用。一种形式是类内部通过继承的方式调用父类的方法,另外一种形式是子类实例化后之后通过继承的方式来调用父类的方法。如下图所示:注意一点,子类内部通过继承的...
  • 父类: public class Fu { public Fu(){ System.out.println(this.getClass().getName()); this.f1(); } public void f1(){ System.out.println("1234"); } } 子类: public class Zi extends Fu{ public ...
  • c++ 子类对象调用父类方法

    千次阅读 2021-03-08 20:37:26
    第一种方式就是子类重写父类的方法在子类中定义和父类同样的方法方法中调用父类方法 父类代码 #pragma once #include "CClientSocket.h" class CTCPInterface { public: CTCPInterface(); ~...
  • 子类可以调用父类.pdf

    2019-08-20 23:08:32
    如果一个类继承一个父类,那么子类会拥有父类所规定的...子类可以调用父类Person p= new student(); 声明父类变量,实例化子类对象 Person p = new Student(); p.personshow();//说明不可以调用子类方法,还是父类
  • 如何在子类中调用父类的函数

    千次阅读 2020-12-18 16:22:00
    父类的函数在子类中直接可以用,如果担心歧义可以使用作用域标识符:: 如果子类重写了父类的函数,而此时想要使用父类的函数则必须使用作用域标识符::
  • python进行面向对象编程,当在子类的实例中调用父类的属性时,由于子类的__init__方法重写了父类的__init__方法,如果在子类中这些属性未经过初始化,使用时就会出错。 例如以下的代码: class A(object): def __...
  • java子类调用父类构造方法

    千次阅读 2021-04-16 16:41:33
    Java子类的构造过程,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的?     答案如下:     当你new一...
  • c++ 在子类中调用父类的成员函数

    千次阅读 2019-12-25 23:19:19
    设有class B: public Base, void B::func() { .... Base::fuck();//清晰地调用父类的函数, 该函数不需要是静态函数,,, private类型可以么?。 ..... }
  • java子类调用父类方法

    千次阅读 2021-03-22 17:40:41
    当一个类继承于另一个类,子类中没有父类的方法时,用子类的对象调用方法时,会首先在子类中查找,如果子类中没有该方法,再到父类中查找。 当一个方法在父类中定义时,调用方法时会使用父类中的属性。 如果该...
  • 运行环境idea 2017.1.1spring 3.2.9.RELEASE需求背景需要实现一个功能,该功能有2个场景A、B,大同小异抽象一个...在调用super.BaseMethod()的基础上补充自己的差异代码错误实现与描述1、Base基类注入Bean,使...
  • 本篇文章介绍了,Java中子类调用父类构造方法的问题分析。需要的朋友参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 497,069
精华内容 198,827
关键字:

在子类中调用父类的方法