第一阶段:Python开发基础 day24 面向对对象三大特性之继承
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了第一阶段:Python开发基础 day24 面向对对象三大特性之继承,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3880字,纯文字阅读大概需要6分钟。
内容图文
![第一阶段:Python开发基础 day24 面向对对象三大特性之继承](/upload/InfoBanner/zyjiaocheng/729/7fae73027f8e4e38a4eb19d4ba24df32.jpg)
目录
上节课内容回顾
-类与对象
-对象有:数据属性(变量),方法属性(方法)
-对象中可以嵌套对象
-往对象中放属性的方式
-__init__
-对象.属性
-对象.方法 在方法中放属性
-属性查找顺序
-先从对象中找----去类中找---报错
-__init__
-类加括号完成实例化,会自动调用
-绑定方法
-类来调用:普通函数,有几个参数就要传几个参数
-对象来调用:不需要传第一个参数(第一个参数名字不一定叫self)
-一切皆对象
-python中一切皆对象
#一切皆对象
ll=[1,2]
#对象来调用
ll.append(5)
#类来调用
list.append(ll,5)
-不重要 函数也是对象
def test():
print('xxxx')
test.name="lqz"
print(test.name)
-小例子
本节课主要学习内容--三大特性之继承
一、什么是继承
什么是继承:
---是一种新建类的方式,继承了一个类,类中的属性和方法就在子类中
--父类/基类
--子类/派生类
--新式类:只要继承了object类,就是新式类,再python3中,默认继承object类
-Python3中:默认继承object
class A:
pass
-python2中,需要显示的指定继承object
--经典类:没有继承object的类,就是经典类
-python3中没有经典类
-python2中才有
二、如何使用继承
class A(object):
pass
class C:
pass
#B继承了A这个类
class B(A,C):
pass
#类的其他内置属性 __名字__
print(B.__dict__)
#类名
print(B.__name__)
#B的父类
print(B.__bases__)
print(C.__bases__)
三、使用继承的好处
利用继承减少代码冗余
四、继承重用父类的两种方法
方法一:-指名道姓的使用
跟继承没有关系
示例:
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.name=name
# self.age=age
self.level=level
class Student(Person):
school = 'yyyy'
def __init__(self,name,age,course):
#如何重用父类的__init__方法
Person.__init__(self,name,age)
self.course=course
def study(self):
Person.study(self)
print("%s学生在学习"%self.name)
stu1=Student('wed',19,"Python")
# stu1.school='xxx'
print(stu1.school)
stu1.study()
方法二:通过super关键字
跟继承就有关系了
示例:
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列表拿到父类对象
#对象来调用绑定方法,不需要传递第一个参数(self)
super().__init__(name,age)
#经典类和新式类
#经典类中必须这么写(py3中没有经典类),都用上面那种方式写
# 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.school='xxx'
# print(stu1.school)
stu1.study()
五、继承属性查找顺序
菱形问题
根据mro列表查找
#继承的菱形问题:新式类和经典类的查找顺序是不一样的
#新式类的查找属性:广度优先
#经典类:深度优先
# class G(object):
# a = "GGG"
# pass
# class F(G):
# # a = "FFF"
# pass
# class E(G):
# # a = "EEE"
# pass
# class D(G):
# # a = "DDD"
# pass
# class C(F):
# # a="CCC"
# pass
# class B(E):
# # a="BBB"
# pass
# class A(B,C,D):
# # a="AAAA"
# pass
#
# a=A()
# print(a.a)
class G(object):
a = "GGG"
pass
class F(G):
# a = "FFF"
pass
class E(G):
# a = "EEE"
pass
class D(G):
# a = "DDD"
pass
class C(F):
# a="CCC"
pass
class B(E):
# a="BBB"
pass
class A(B,C,D):
# a="AAAA"
pass
a=A()
print(a.a)
#mro 列表,继承顺序查找列表(只在新式类中有)1
print(A.mro())
print(A.__mro__)
#继承的菱形问题(显示的都继承一个类,不是object类):新式类和经典类的查找顺序是不一样的
#新式类(py3中全是新式类):广度优先---从左侧开始,一直往上找,找到菱形的顶点结束(不包括菱形顶点),继续下一个继承的父类往上找,找到菱形的顶点结束(不包括菱形顶点),最后找到菱形顶点
#经典类(只有py2中才有):深度优先---从左侧开始,一直往上找,找到菱形的顶点结束(包括菱形顶点)继续下一个继承的父类往上找,找到菱形的顶点结束(不包含菱形定点)
#不出现菱形问题:正常查找
今日总结
暂无
内容总结
以上是互联网集市为您收集整理的第一阶段:Python开发基础 day24 面向对对象三大特性之继承全部内容,希望文章能够帮你解决第一阶段:Python开发基础 day24 面向对对象三大特性之继承所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。