Python重用父类方法

一、重用父类方法

1 与继承没有关系的重用

  • 指名道姓的使用

  • 在子类里想用父类的方法,我们可以直接用父类名.方法名()--->父类里方法有几个参数就传几个参数

  • 我们看起来是子类在调用父类的方法,但是实际上,这并没有存在继承关系

class A:
    def __init__(self,name,age):
        self.name=name
        self.age=age
        
class Person:
    school = 'oldboy'
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def study(self):
        print('study....')

class Teacher(Person):
    def __init__(self,name,age,level):
        A.__init__(self,name,age)
        self.level=level

class Student(Person):
    school = 'yyyy'
    def __init__(self,name,age,course):
        Person.__init__(self,name,age)
        self.course=course
    def study(self):
        Person.study(self)
        print("%s学生在学习"%self.name

2 与继承有关系的重用

super关键字

super在经典类和新式类使用的区别

经典类

  • super(Student,self).__init__(name,age)----->Student:当前子类,self:当前对象
  • python3中没有经典类,所以这种方式一般是在python2中写
  • python3中也会有这种写法,这样写是为了代码可以向下兼容,拿到python2中也可以直接使用

新式类

  • super().__init__(name,age):括号里面不加参数
  • super() 会按照__mro__列表拿到父类对象
  • 它是通过对象来调用绑定方法的,不需要传递第一个参数,对象调用父类的绑定方法时,对自动将对象自己传进去
#Python交流学习Q群:711312441
class Person(object):
    school = 'oldboy'
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def study(self):
        print('study....')

class Student(Person):
    school = 'yyyy'
    def __init__(self,name,age,course):
        #super() 会按照mro列表拿到父类对象
        super().__init__(name,age)
        # super(Student,self).__init__(name,age)
        self.course=course
    def study(self):
        Person.study(self)
        super().study()
        print("%s学生在学习"%self.name)


stu1=Student('wed',19,"Python")
stu1.study()
print(Student.__mro__)
study....

study....

wed学生在学习
(<class 'main.Student'>, <class 'main.Person'>, <class 'object'>)

二、重用父类两种方法的使用

1 指名道姓的使用

类名.类里的方法

  • 一般在没有继承关系的时候使用
  • 如果继承了多个父类,super是按照mro列表找,现在想确切的用某个父类的某个方法,就需要指名道姓的使用

2 super的使用

  • super().方法名()
  • 有继承关系的时候使用
  • super()相当于得到了一个特殊对象,第一个参数不需要传,调用绑定方法,会把自己传过去
  • 使用super方法,它用父类的方法时,按照对象的mro列表的顺序来查找
class A:
    def f1(self):
        print('A.f1')
class B:
    def f1(self):
        print('B.f1')
    def f2(self):
        print('B.f2')
        super().f1()
        # return 'xxxxx'

#class C(A,B):
#注意这个顺序,这个顺序报错
class C(B,A):
    def f1(self):
        print('C.f1')
        
        
        
c=C()
c.f2()
print(C.mro())
B.f2
A.f1

[<class 'main.C'>, <class 'main.B'>, <class 'main.A'>, <class 'object'>]

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python重用父类方法 - Python技术站

(0)
上一篇 2023年3月31日
下一篇 2023年4月2日

相关文章

  • Python教程:类的继承,什么是继承

    一、什么是继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类 继承的特性是:子类会遗传父类的属性 继承是类与类之间的关系 二、为什么用继承 使用继承可以减少代码的冗余 三、对象的继承 Python中支持一个类同时继承多个父类 class Parent1: pass class Parent2: pass class Sub1(Parent1,…

    Python开发 2023年3月31日
    00
  • Python教程:读取文件有三种方法:(read、readline、readlines)详细用法

    python3中,读取文件有三种方法:read()、readline()、readlines()。 此三种方法,均支持接收一个变量,用于限制每次读取的数据量,但是,通常不会使用。 本文的目的:分析、总结上述三种读取方式的使用方法及特点。 一、read方法 特点:读取整个文件,将文件内容放到一个字符串变量中。 缺点:如果文件非常大,尤其是大于内存时,无法使用r…

    Python开发 2023年4月2日
    00
  • python学习:各种推导式玩法-推导式套路

    1.推导式套路 除了最简单的列表推导式和生成器表达式,其实还有字典推导式、集合推导式等等。 下面是一个以列表推导式为例的推导式详细格式,同样适用于其他推导式。 variable = [out_exp_res for out_exp in input_list if out_exp == 2] out_exp_res:  列表生成元素表达式,可以是有返回值的函…

    Python开发 2023年4月2日
    00
  • python学习:map函数和filter函数用法教程

    map()函数可以对一个数据进行同等迭代操作。 例如: def f(x): return x * x r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) print(list(r)) map函数传入的第一个参数就是函数本身,即f。第二个参数是要操作的数据 map() 作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简…

    Python开发 2023年4月2日
    00
  • Python学习:获取代理ip以及使用

    python爬虫浏览器伪装 #导入urllib.request模块 import urllib.request #设置请求头 headers=(“User-Agent”,”Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22…

    Python开发 2023年4月2日
    00
  • python学习:获取指定目录下所有文件名os.walk和os.listdir

    1.os.walk 返回指定路径下所有文件和子文件夹中所有文件列表 其中文件夹下路径如下: import os def file_name_walk(file_dir): for root, dirs, files in os.walk(file_dir): print(“root”, root) # 当前目录路径 print(“dirs”, dirs) #…

    Python开发 2023年4月2日
    00
  • python练习题:求10万以内的质数

    1、使用质数定义计算 #version1import datetime #导入模块计算效率start = datetime.datetime.now() count = 0 for x in range(2,100000): #求指定范围内的质数 for i in range(2,x): #除以1和本身之外的数 if x % i == 0: break el…

    Python开发 2023年4月2日
    00
  • Python学习:len() 函数详解:获取字符串长度或字节数、join()方法:合并字符串

    Python中,要想知道一个字符串有多少个字符(获得字符串长度),或者一个字符串占用多少个字节,可以使用len()函数。 语法格式: len(string) string 用于指定要进行长度统计的字符串 示例: a = ‘www.baidu.com’ print(len(a)) 输出 13 在 Python 中,不同的字符所占的字节数不同,数字、英文字母、小…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部