1 继承: 2 #python2 经典类是按深度优先来继承的,新式类是按广度优先来继承的 3 #python3 经典类和新式类都是按广度优先来继承的 4 5 6 7 #经典类:class People: 8 class People(object): #这个是新式类,多继承的时候有了改变 9 10 def __init__(self, name, age): 11 self.name =name 12 self.age = age 13 14 15 def eat(self): 16 print("%s is eating" % self.name) 17 18 19 def talk(self): 20 print("%s is talking" % self.name) 21 22 def sleep(self): 23 print("%s is sleeping" % self.name) 24 25 #多继承的示范 26 class Relation(object): 27 def make_friends(self, obj): 28 print("%s is making friends with %s" % (self.name, obj.name)) 29 self.friends.append(obj) #要用obj,这样才和另一个实例产生联系 30 31 #子类继承 32 class Man(People, Relation): #小括号中 一定要有父类名称,如People 33 34 def __init__(self, name, age, sex="man"): 35 # People().__init__(self,name, age) 第一种的初始化方法 36 super().__init__(name, age) # superclass,super函数直接继承所有,super(Man, self)的省略 37 self.sex = sex 38 self.friends = [] 39 40 def working_hard(self): 41 print("earning money.") 42 43 def sleep(self): #重构了父类的方法 44 People.sleep(self) 45 print("Man %s is sleeping" % self.name) 46 47 48 class Woman(People, Relation): 49 50 def __init__(self,name, age, sex = "woman"): 51 super().__init__(name, age) 52 self.sex = sex 53 self.friends = [] 54 55 def get_birth(self): 56 print("%s is giving birth to a baby." % self.name) 57 58 59 p1 = People("Adam", 26) 60 p1.eat() 61 print("%s is %s years old." % (p1.name, p1.age)) 62 p1.sleep() 63 64 m1 = Man("Alex", 28) 65 m1.eat() 66 m1.working_hard() 67 m1.sleep() 68 m1.make_friends(p1) 69 print(m1.friends[0].name) 70 71 w1 = Woman("Shell", 27) 72 w1.get_birth() 73 w1.sleep()