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学习:重用父类功能的两种方式

    在子类派生的新方法中如何重用父类的功能方式一:指名道姓调用某一个类下的函数=》不依赖于继承关系 class OldboyPeople: def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def f1(self): print(‘%s say hello’ %se…

    Python开发 2023年4月2日
    00
  • Python教程:常用网页字符串处理技巧

    首先一些Python字符串处理的简易常用的用法。其他的以后用到再补充。 1.去掉重复空格 s = “hello hello hello” s = ‘ ‘.join(s.split()) 2.去掉所有回车(或其他字符或字符串) s = “hello\nhello\nhello hello\n” print(s) s = s.replace(“\n”,””) p…

    Python开发 2023年4月2日
    00
  • Python爬虫学习:Cookie 和 Session 的区别是什么?

    一、 含义 Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份,怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携…

    Python开发 2023年4月2日
    00
  • Python 函数递归教程

    1.什么是函数递归 函数的嵌套调用:一个函数里面又写了一个函数。 函数的递归调用:他是一种特殊的嵌套调用,他也是在函数里面调用函数,但是他在函数体内调用的函数时他自己本身。 如果递归函数不断的在函数体内调用函数自己本身,如果我们不给终止条件来结束程序运行的话,程序就会进入死循环,那这个时候程序运行将会报错,因此我们应该给递归函数一个明确的结束条件。 def …

    Python开发 2023年3月31日
    00
  • Python教程:IO

    在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。 1.读文件 要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标…

    Python开发 2023年3月31日
    00
  • Python中__new__方法的详细教程

    只有继承于object的新式类才能有__new__方法,__new__方法在创建类实例对象时由Python解释器自动调用,一般不用自己定义,Python默认调用该类的直接父类的__new__方法来构造该类的实例,如果该类的父类也没有重写__new__,那么将一直按此规矩追溯至object的__new__方法,因为object是所有新式类的基类,若需要自定义_…

    Python开发 2023年4月2日
    00
  • python3教程:json、pickle和sqlite3持久化存储字典对象

    在各种python的项目中,我们时常要持久化的在系统中存储各式各样的python的数据结构,常用的比如字典等。尤其是在云服务类型中的python项目中,要持久化或者临时的在缓存中储存一些用户认证信息和日志信息等,最典型的比如在数据库中存储用户的token信息。在本文中我们将针对三种类型的python持久化存储方案进行介绍,分别是json、pickle和pyt…

    Python开发 2023年4月2日
    00
  • Python教程:用__new__ 创建单例模式

    1.用 __new__方法 class Singleton(object): def __new__(cls): if not hasattr(cls,’_instance’): cls._instance=super(Singleton,cls).__new__(cls) # cls.__instance = object.__new__(cls) #这样…

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