继承:子类继承父类的一切.
# 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()
广度优先:
深度优先: