day24 02 单继承(派生)
程序员文章站
2022-07-11 09:32:57
day24 02 单继承(派生) 1、首先来看一个简单的例子 比如: 狗类的属性有:吃,喝,看门 鸟类的属性有:吃,喝,下蛋 看门和下蛋就是这两种动物不同的属性,而吃喝是两个共同的属性 以下代码实现了将一个子类的self传入父类中,然后实现了对共同属性的操作,也实现了不同属性的操作: 2、继续使用人 ......
day24 02 单继承(派生)
1、首先来看一个简单的例子
比如:
狗类的属性有:吃,喝,看门
鸟类的属性有:吃,喝,下蛋
看门和下蛋就是这两种动物不同的属性,而吃喝是两个共同的属性
以下代码实现了将一个子类的self传入父类中,然后实现了对共同属性的操作,也实现了不同属性的操作:
class animal: def __init__(self): # 因为狗类中没有可执行的_init_文件,所以执行的是父类的,但是这里的self不再是animal本身的self了,而是狗类创建的self print('执行animal._init_') self.func() # 因为传进来的是狗类的self也就是dog,所以self.func=dog.func def eat(self): print('%s eating'%self.name) def drink(self): print('%s drinking'%self.name) def func(self): print('animal.func') class dog(animal): # 创建了狗类的self,但是没有找到自身的_init_文件,所以会向父类中寻找 def guard(self): print('guarding') def func(self): print('dog.func') dog = dog() # 在这里调用的时候,执行的是animal里面的init文件,但是在执行之前就在狗类里面先创建了一个狗类的self class bird(animal): def __init__(self): pass
执行animal._init_ dog.func
2、继续使用人狗大战的游戏例子
人类和狗类的相同属性:name,blood,aggr
不同属性:人类有sex,money,狗类有kind
它们的相同属性可以放在父类中,而不同的属性放在各自类里面,对相同属性与不同属性的操作如下:
class animal: # 父类 # 子类拥有的共同属性 def __init__(self,name,blood,aggr): # 狗和人在游戏中拥有的共同属性种类 self.name = name self.blood = blood self.aggr = aggr # 子类拥有的共同方法 def eat(self): print('吃药回血') self.blood += 100 class dog(animal): # 子类 def __init__(self,name,blood,aggr,kind): # dog类拥有的属性全部都传进去,并且创建dog的self,只有自己的init文件中没有的属性才会像父类寻求,即共同属性是通过父类执行 animal.__init__(self,name,blood,aggr) # 因为前面已经创建了dog自己的self,所以这里的self就是dog这个对象,执行_init_文件的同时,并将狗的self传入animal中 self.kind = kind # 狗类的派生属性,也就是不同于人类的属性,也就是父类中不包括的属性 def bite(self,someone): # 派生方法 someone.blood -= self.aggr # 下面的人类的有关分析与狗类的相同 class someone(animal): # 子类 def __init__(self,name,blood,aggr,sex,money): animal.__init__(self,name,blood,aggr) self.sex = sex # 人类的派生属性,也就是不同于人类的属性,也就是父类中不包括的属性 self.money = money # 人类的派生属性,也就是不同于人类的属性,也就是父类中不包括的属性 def attack(self,dog): # 派生方法 dog.blood -= self.aggr dog1 = dog('溜溜球',200,500,'泰迪') print(dog1.name) person1 = someone('王昭君',300,500,'girl',1000) print(person1.name) print(dog1.kind) print(person1.sex) print(person1.money) print(dog1.eat()) print(person1.eat()) print(person1.blood) print(dog1.blood)
运行结果:
溜溜球 王昭君 泰迪 girl 1000 吃药回血 none 吃药回血 none 400 300
3、小结
- 父类中没有的属性,在子类中出现叫做派生属性
- 父类中没有的方法,在子类中出现叫做派生方法
- 只要是子类的对象调用,子类中有的名字一定用子类的,子类中没有的,才找父类的,如果父类也没有就会报错
- 如果父类子类都有用子类的
- 如果还想用父类的,单独调用父类的