翼度科技»论坛 编程开发 python 查看内容

Python重用父类方法

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
一、重用父类方法

1 与继承没有关系的重用


  • 指名道姓的使用
  • 在子类里想用父类的方法,我们可以直接用父类名.方法名()--->父类里方法有几个参数就传几个参数
  • 我们看起来是子类在调用父类的方法,但是实际上,这并没有存在继承关系
  1. class A:
  2.     def __init__(self,name,age):
  3.         self.name=name
  4.         self.age=age
  5.         
  6. class Person:
  7.     school = 'oldboy'
  8.     def __init__(self,name,age):
  9.         self.name=name
  10.         self.age=age
  11.     def study(self):
  12.         print('study....')
  13. class Teacher(Person):
  14.     def __init__(self,name,age,level):
  15.         A.__init__(self,name,age)
  16.         self.level=level
  17. class Student(Person):
  18.     school = 'yyyy'
  19.     def __init__(self,name,age,course):
  20.         Person.__init__(self,name,age)
  21.         self.course=course
  22.     def study(self):
  23.         Person.study(self)
  24.         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__列表拿到父类对象
  • 它是通过对象来调用绑定方法的,不需要传递第一个参数,对象调用父类的绑定方法时,对自动将对象自己传进去
  1. #Python交流学习Q群:711312441
  2. class Person(object):
  3.     school = 'oldboy'
  4.     def __init__(self,name,age):
  5.         self.name=name
  6.         self.age=age
  7.     def study(self):
  8.         print('study....')
  9. class Student(Person):
  10.     school = 'yyyy'
  11.     def __init__(self,name,age,course):
  12.         #super() 会按照mro列表拿到父类对象
  13.         super().__init__(name,age)
  14.         # super(Student,self).__init__(name,age)
  15.         self.course=course
  16.     def study(self):
  17.         Person.study(self)
  18.         super().study()
  19.         print("%s学生在学习"%self.name)
  20. stu1=Student('wed',19,"Python")
  21. stu1.study()
  22. print(Student.__mro__)
复制代码
  1. study....
  2. study....
  3. wed学生在学习
  4. (<class 'main.Student'>, <class 'main.Person'>, <class 'object'>)
复制代码
二、重用父类两种方法的使用

1 指名道姓的使用

类名.类里的方法

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


  • super().方法名()
  • 有继承关系的时候使用
  • super()相当于得到了一个特殊对象,第一个参数不需要传,调用绑定方法,会把自己传过去
  • 使用super方法,它用父类的方法时,按照对象的mro列表的顺序来查找
  1. class A:
  2.     def f1(self):
  3.         print('A.f1')
  4. class B:
  5.     def f1(self):
  6.         print('B.f1')
  7.     def f2(self):
  8.         print('B.f2')
  9.         super().f1()
  10.         # return 'xxxxx'
  11. #class C(A,B):
  12. #注意这个顺序,这个顺序报错
  13. class C(B,A):
  14.     def f1(self):
  15.         print('C.f1')
  16.         
  17.         
  18.         
  19. c=C()
  20. c.f2()
  21. print(C.mro())
复制代码
  1. B.f2
  2. A.f1
  3. [<class 'main.C'>, <class 'main.B'>, <class 'main.A'>, <class 'object'>]
复制代码
来源:https://www.cnblogs.com/djdjdj123/p/17020028.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具