今日内容大纲
- 初识继承
字面意思:儿子完全可以使用父类的所有内容
专业角度: 如果 B类继承 A类,B 类就称为子类,派生类
A类就称为父类,基类,超类
面向对象的三大特性之一:继承,封装,多态
2.继承的优点
1.减少代码的重复性
2.增加类之间的耦合性
3.代码更加清晰,流畅
3.单继承
1.类名执行父类属性方法
2.对象执行父类属性方法
3.在子类中既执行子类方法又执行父类方法
class Animal:
#
# def __init__(self, name, sex, age):
#
# self.name = name
# self.age = age
# self.sex = sex
#
#
# class Human(Animal):
# pass
# class Dog(Animal):
# pass
#
#
# class Cat(Animal):
# pass
# class Cat(object):
# pass
cat1 = Cat()
# Human,Dog,Cat 子类,派生类.
# Animal 父类,基类,超类.
# person = Human('李业', '男', 18)
# print(person.name)
4.多继承
1.经典类:不继承 object 类,深度优先原则
2.新式类:继承 object 类.mro(c3)算法
class A(object): # pass # class A: # pass # # # class B(A): # pass # # class C(B): # pass # class A: # pass # # # class B(object): # pass
class ShenXian:
#
# def fly(self):
# print('神仙都会飞')
#
# def walk(self):
# print('神仙会走路')
#
# class Monkey:
#
# def climb(self):
# print('猴子都会爬树')
#
# def walk(self):
# print('猴子会走路')
#
# class SunWuKong(ShenXian,Monkey):
# pass
#
# sun = SunWuKong()
# # sun.fly()
# # sun.climb()
# sun.walk()
# 经典类: 深度优先.从左至右,深度优先.
class O:
name = '太白'
class D(O):
pass
class E(O):
name = '李业'
# pass
class F(O):
name = '宝元'
class B(D,E):
pass
class C(E,F):
pass
class A(B,C):
pass
obj = A()
print(obj.name)
# mro(Child(Base1,Base2)) = [ Child ] + merge( mro(Base1), mro(Base2), [ Base1, Base2] )
# mro(A(B,C)) = [A] + merge(mro(B),mro(C),[B,C])
'''
mro(A(B,C)) = [A] + merge(mro(B),mro(C),[B,C])
mro(B(D,E)) = [B] + merge(mro(D),mro(E),[D,E])
mro(B(D,E)) = [B] + merge([D,O],[E,O],[D,E])
mro(B(D,E)) = [B,D] + merge([O],[E,O],[E])
mro(B(D,E)) = [B,D,E] + merge([O],[O])
mro(B(D,E)) = [B,D,E,O]
mro(C) = [C,E,F,O]
mro(A(B,C)) = [A] + merge([B,D,E,O],[C,E,F,O],[B,C])
= [A,B] + merge([D,E,O],[C,E,F,O],[C])
= [A,B,D] + merge([E,O],[C,E,F,O],[C])
= [A,B,D,C] + merge([E,O],[E,F,O])
= [A,B,D,C,E] + merge([O],[F,O])
= [A,B,D,C,E,F,O]
'''
# print(A.mro())
单继承课堂练习
class Base:
def __init__(self, num):
self.num = num
def func1(self):
print(self.num)
class Foo(Base):
pass
obj = Foo(123) # 实例化一个对象
obj.func1() # Foo 里找不到就去父类找
# 123
class Base:
def __init__(self, num):
self.num = num
def func1(self):
print(self.num)
class Foo(Base):
def func1(self):
print("Foo. func1", self.num)
obj = Foo(123)
print(obj.__dict__)
# obj.func1()
# {'num': 123}
# Foo. func1 123
class Base:
def __init__(self, num):
self.num = num
def func1(self):
print(self.num)
class Foo(Base):
def func1(self):
print("Foo. func1", self.num)
obj = Foo(123)
obj.func1()
# Foo. func1 123
class Base:
#
def __init__(self, num):
self.num = num
def func1(self): # self= obj
print(self.num) # 123
self.func2() # obj.func2()
def func2(self):
print("Base.func2")
class Foo(Base):
def func2(self):
print("Foo.func2")
obj = Foo(123)
obj.func1()
123
Foo.func2
class Base:
def __init__(self, num):
self.num = num
def func1(self):
print(self.num)
self.func2()
def func2(self):
print(111, self.num)
class Foo(Base):
def func2(self):
print(222, self.num)
lst = [Base(1), Base(2), Foo(3)]
for obj in lst:
obj.func2()
111 1
111 2
222 3
class Base: # def __init__(self, num): # self.num = num # # def func1(self): # self = Foo(3) # print(self.num) # self.func2() # # def func2(self): # print(111, self.num) # # class Foo(Base): # def func2(self): # print(222, self.num) # # lst = [Base(1), Base(2), Foo(3)] # # for obj in lst: # obj.func1() 1 111 1 2 111 2 3 222 3
来源:https://www.cnblogs.com/hualibokeyuan/p/11330868.html