继承:子类继承父类的一切.
# class Cat(Animal)
# Animal 叫做父类,也叫作基类.
# Cat 叫做子类,也叫作派生类.
class Animal:
nickname = '动物'
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
def eat(self):
print("%s在吃东西" % self.name)
class Person(Animal):
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
p1 = Person('太白',25,'男')
p1.eat()
dog1 = Dog('日天',6,'公')
dog1.eat()
print(p1.nickname)
# 为什么子类能找到父类的所有?? 存在父类指针的概念
print(Person.nickname)
# 类名,对象都可以找到父类的所有方法.
#python3x python2x
#python3x 类默认都继承object,继承object类的类叫做新式类.
#python2x 类默认什么不都继承,不继承object的类叫做经典类.如果在python2x中,你让他继承object类,就变成新式类了.
继承去分:
# 单继承,多继承.
#单继承: 查询顺序一直向上(新式类,经典类一样.).
继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类
python中类的继承分为:单继承和多继承
复制代码
class ParentClass1: #定义父类
pass
class ParentClass2: #定义父类
pass
class SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass
pass
class SubClass2(ParentClass1,ParentClass2): #python支持多继承,用逗号分隔开多个继承的类
pass
如果没有指定基类,python的类会默认继承object类,object是所有python类的基类
# class Animal:
# nickname = '动物'
#
# def __init__(self, name, age, sex):
# self.name = name
# self.age = age
# self.sex = sex
#
# def eat(self):
# print("%s在吃东西" % self.name)
#
#
# class Person(Animal):
#
# def speek(self):
# print('%s可以用语言交流' % self.name)
#
#
# class Brid(Animal):
#
# def __init__(self, name, age, sex, wing): # self = b1 对象空间
# # Animal.__init__(self,name,age,sex) # 第一种 如何在子类中执行父类方法
# super(Brid,self).__init__(name, age, sex) # 第二种 如何在子类中执行父类方法
# self.wing = wing
#
# def eat(self, food):
# super().eat()
# print('%s吃%s' % (self.name, food))
#
# def bite(self):
# print('%s可以啄人' % self.name)
# p1 = Person('太白',25,'男')
# print(p1.nickname)
b1 = Brid('鹦鹉', 12, '母', '大翅膀')
b1.eat('小米')
# print(b1.__dict__)
# b1.eat('小米')
# def func1(y,z,w):
# print(666)
# def func(x,y,z,w):
# func1(y,z,w)
# func(1,2,3,4)
# 在子类中,执行父类的方法
# Animal.__init__(self,name,age,sex) # 第一种
#用这种: super().__init__(name, age, sex) # 第二种 完整的写法 super(Brid,self).__init__(name, age, sex) 不提倡
多继承:
核心:广度算法
# 新式类 : 广度优先, 3.0 都是新类型,
旧类型:深度优先
一般来说会使用 mro()来检测
# class A:
# def func(self):
# print('A')
#
# class B(A):
#
# def func(self):
# print('B')
#
# class C(A):
# def func(self):
# print('C')
#
# class D(B,C):
#
# def func(self):
# print('D')
#
# d = D()
# d.func()
广度优先:
深度优先: