一.继承
概念:继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类又可称为基类或超类,新建的类称为派生类或子类
作用:子类会“”遗传”父类的属性,从而解决代码重用问题
#######猫和狗有大量相同的内容
'''
#伪代码如下:
class 猫:
def 喵喵叫(self):
print('喵喵叫')
def 吃(self):
pass
def 喝(self):
pass
def 拉(self):
pass
def 撒(self):
pass
class 狗:
def 汪汪叫(self):
print('喵喵叫')
def 吃(self):
pass
def 喝(self):
pass
def 拉(self):
pass
def 撒(self):
pass
#######采用继承思想实现:将重复代码放到动物类中,猫狗继承动物类
#伪代码如下:
class 动物:
def 吃(self):
pass
def 喝(self):
pass
def 拉(self):
pass
def 撒(self):
pass
# 在类后面括号中写入另外一个类名,表示当前类继承另外一个类
class 猫(动物):
def 喵喵叫(self):
print('喵喵叫')
# 在类后面括号中写入另外一个类名,表示当前类继承另外一个类
class 狗(动物):
def 汪汪叫(self):
print('喵喵叫')
'''
############继承的代码实现
class Animal:
def eat(self):
print("%s 吃 " %self.name)
def drink(self):
print ("%s 喝 " %self.name)
def shit(self):
print ("%s 拉 " %self.name)
def pee(self):
print ("%s 撒 " %self.name)
class Cat(Animal):
def __init__(self, name):
self.name = name
self.breed = '猫'
def cry(self):
print('喵喵叫')
class Dog(Animal):
def __init__(self, name):
self.name = name
self.breed='狗'
def cry(self):
print('汪汪叫')
# ######### 执行 #########
c1 = Cat('小白家的小黑猫')
c1.eat()
c2 = Cat('小黑的小白猫')
c2.drink()
d1 = Dog('胖子家的小瘦狗')
d1.eat()
分类:继承分为单继承和多继承
class ParentClass1:
pass
class ParentClass2:
pass
class SubClass(ParentClass1): #单继承
pass
class SubClass(ParentClass1,ParentClass2): #多继承
pass
#查看继承
print(SubClass1.__bases__) #(<class '__main__.ParentClass1'>,)
print(SubClass2.__bases__) #(<class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>)
#注意:如果没有指定基类,python的默认继承object类,object是所有python类的基类,它提供了一些常用方法的实现,如__str__
class Dog:
pass
print(Dog.__bases__) #(<class 'object'>,)
属性查找:
class Foo:
def f1(self):
print('Foo.f11')
def f2(self):
print('Foo.f2')
self.f1()
class Bar(Foo):
def f1(self):
print('Foo.f12')
b=Bar()
b.f2() #Foo.f2 #Foo.f12
##-->>运行顺序是 Foo类的f2方法 -> Bar类的f1方法
#结论:出现父类和子类的属性名一样的时候,子类优先使用自己的属性
二.派生
子类也可以添加自己新的属性或者在自己这里重新定义这些属性(不会影响到父类),需要注意的是一旦重新定义了自己的属性且与父类重名,那么调用新增的属性时,就以自己为准了
#######当子类本身并没有对应的属性,则调用父类的属性
class Dad:
'这是Dad类'
money = 100
def __in