面向对象类的继承----day23

面向对象类的继承
在子类中 类名后面加上括号,写上父类的名称即可
在python中一个子类可以有多个父类,多个父类在括号中用逗号隔开,这一点在其他语言中是不支持的
----------------
class Parent:
year = 2018

def coding(self):
print("正在编程........")

class Sub(Parent):
pass

print(Parent.year)

print(Sub.year)

Sub().coding()

s = Sub()
print(s.year) # 子类可以使用父类中的属性
s.coding() # 子类也可以使用父类中的函数

抽象:抽取多个类中相同的部分形成另一个类

通过继承,避免了重复代码的编写
通过抽象,避免了继承到一些不应该有的内容
应该先抽象再继续
在抽取过程中,可能会有一些跟业务无关的类,这是正常的,这些称之为公共类
公共类的作用是存储多个相同属性和技能

派生:
派生就是子类继承父类,并拥有自己独特的属性或技能,该子类称之为派生类(只要之类中出现了任何新内容,他就是一个派生类)
派生类一定是某个子类


子类访问父类的公共的方法:
1.def __init__(self,name,age,sex,number):-----先定义__init__
--父类名.__init__(self,name,age,sex)----------在取得父类中定义的公共方法或属性
--self.number = number------------------------在定义要添加的方法或属性

super() # 表示创建一个特殊的对象 用于调用父类的方法
2.super().sayHI()-----------------------------使用super调用父类里面的方法调用但是只能在python3中使用

在python2中 super的使用方式有所不同 需要传入当前类,当前对象
3.super(Student,self).__init__(name)----------使用super调用父类里面的方法添加进去 可以再python2 和python3中通用
---------------------------------------------------------------------------
# 子类访问父类的方法
# class Person:
# def __init__(self,name):
# self.name=name
#
#
# class Student(Person):
# def __init__(self,name,number):
# Person.__init__(self,name) #在之类中从用父类的方式 1,指名道姓地调用,与继承没有关系
# self.number=number
---------------------------------------------------------------------------
# class Person:
# def __init__(self,name,age,sex):
# self.name=name
# self.age=age
# self.sex=sex
#
#
# class Student(Person):
# def __init__(self,name,age,sex,number):
# super().__init__(name,age,sex) #方法2 用super方法 只能在python3中使用
# # super(Student,self).__init__(name) #方法3 在python2和python3中通用方法
# self.number=number

存在继承关系的查找顺序(查看吧查找顺序用:对象.__dict__)
对象->类->父类->父类的父类.....
优先查找对象,如果对象没有则查找类,类没有回沿着继承关系一直查找到最顶层的父类,无论是属性还是方法,查找顺序是一样的,先继承谁就先查找谁

经典类与新式类:

object称之为类根 意思是 所有类都源自于object
为什么这么设计?
例如:创建对象时,需要申请内存空间,创建新的名称空间,将对象的属性放入名称空间,这一些了复杂的基础操作,都有object来完成
简单地说object提供了一些常用的基础操作

新式类:所有直接继承或间接继承的object的类,都是新式类,在python3中默认所有类都是新式类

经典类:python2中默认是经典类(不会自动继承object)
__bases__用于查看父类
"super访问父类内容时 按照mro列表属性查找"
# 子类出现了与父类重复的名字 称之为覆盖
# 子类出现了与父类不同的名字 称之为拍派生

posted @ 2018-12-14 16:52  WenChen-0o0  阅读(113)  评论(0编辑  收藏  举报