面向对象的集成和现实生活中的继承相同,即:子继承父的内容
例如:
狗:汪、吃、喝、拉、撒
猫:喵、吃、喝、拉、撒
为狗、猫、各自创建一个"类":
1 class Dog: 2 3 def __init__(self,name,age,gender): 4 5 self.name = name 6 7 self.age = age 8 9 self.gender = gender 10 11 def bark(self): 12 13 print("%s is dog dog !" % (self.name)) 14 15 def eat(self): 16 17 print("%s is eating something now!" % (self.name)) 18 19 def drink(self): 20 21 print("%s is drinking something now!" % (self.name)) 22 23 def shit(self): 24 25 print("%s is shiting now!" % (self.name)) 26 27 def pee(self): 28 29 print("%s is peeing now!" % (self.name)) 30 31 ######### 32 33 class Cat: 34 35 def __init__(self,name,age,gender): 36 37 self.name = name 38 39 self.age = age 40 41 self.gender = gender 42 43 44 45 def miaow(self): 46 47 print("%s is cat cat !" % (self.name)) 48 49 50 51 def eat(self): 52 53 print("%s is eating something now!" % (self.name)) 54 55 56 57 def drink(self): 58 59 print("%s is drinking something now!" % (self.name)) 60 61 62 63 def shit(self): 64 65 print("%s is shiting now!" % (self.name)) 66 67 68 69 def pee(self): 70 71 print("%s is peeing now!" % (self.name))
上述两端代码可以看出,吃喝拉撒都是猫、狗特有的属性,但是分别在两个类中编写了两次,通过继承思路修改代码:
父类"动物":吃、喝、拉、撒
子类"狗":汪汪叫(继承父类功能)
子类"猫":喵喵叫(继承父类功能)
1 class Animal: 2 3 def eat(self): 4 5 print("%s is eating something now !" % (self.name)) 6 7 8 9 def drink(self): 10 11 print("%s is drinking something now!" % (self.name)) 12 13 14 15 def shit(self): 16 17 print("%s is shiting now!" % (self.name)) 18 19 20 21 def pee(self): 22 23 print("%s is peeing now!" % (self.name)) 24 25 26 27 class Dog(Animal): 28 29 def __init__(self,name,age,gender): 30 31 self.name = name 32 33 self.age = age 34 35 self.gender = gender 36 37 38 39 def bark(self): 40 41 print("%s is dog dog !" % (self.name)) 42 43 44 45 class Cat(Animal): 46 47 def __init__(self,name,age,gender): 48 49 self.name = name 50 51 self.age = age 52 53 self.gender = gender 54 55 56 57 def miaow(self): 58 59 print("%s is cat cat" % (self.name)) 60 61 62 63 dog1 = Dog("cisco",2,"male") 64 65 cat1 = Cat("xiaohei",3,"female") 66 67 dog1.bark() 68 69 cat1.eat()
在指定类的时候,括号中写另一个类,等于让当前类继承括号中类的功能。
编写继承类的思路:
把多个类公有的功能写入父类,子类只需要继承父类,这样就不需要一一编写重复的功能块。
多类继承:
多类继承的时候,如何查找方法,在Python2.x的版本中区分经典类、新式类。两种不同类型的类在查找"方法"的时候查找规则是不同的。
经典类:深度优先
新式类:广度优先
如何区分"类"的类型
新式类:当前类或者父类继承了(object)
在Python3.x中,不在讨论经典类,默认都是新式类,所以我们只需要知道广度优先的查找特征。
class D:
class C:
class B(C,D):
class A(B):
ABCD四个类的关系:
B是A的父类
C,D是B的父类
这时候,在A中执行一个方法的时候,Python查找路径:
A————>B————>C————>D
任何一个过程中,只要找到,就停止继续查找