day24 02 单继承(派生)
2019-05-22 06:35:02来源:博客园 阅读 ()
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、小结
- 父类中没有的属性,在子类中出现叫做派生属性
- 父类中没有的方法,在子类中出现叫做派生方法
- 只要是子类的对象调用,子类中有的名字一定用子类的,子类中没有的,才找父类的,如果父类也没有就会报错
- 如果父类子类都有用子类的
- 如果还想用父类的,单独调用父类的
4、super关键字
super关键字只在新式类中使用,python3中所有类都是新式类,在使用super的方法调用执行父类的init文件的时候,不需要再传self了:
class animal: # 父类 def __init__(self,name,blood,aggr): # 狗和人在游戏中拥有的共同属性种类 self.name=name self.blood=blood self.aggr=aggr class dog(animal): # 子类 def __init__(self,name,blood,aggr,kind): super().__init__(name,blood,aggr) # super方法调用执行父类的init文件,并且不用传self,会自动将self传进去,不像前面的Animal._init_的方法还需要传self # super关键字的使用只在新式类中有,python3中所有类都是新式类 self.kind = kind # 派生属性 def bite(self,someone): someone.blood-=self.aggr class someone(animal): # 子类 def attack(self,dog): dog.blood -=self.aggr dog1 = dog('溜溜球',200,500,'泰迪') print(dog1.name)
运行结果:溜溜球
所以在子类当中调用父类方法有:
- 父类名.方法名:需要自己传self参数
- super().方法名:不需要自己传self参数
原文链接:https://www.cnblogs.com/wxm422562/p/10896998.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:PyCharm2019 激活方式
- Python基础总结之初步认识---class类的继承(终)。第十六天 2019-08-13
- PYTHON类的继承 2019-07-24
- 母版和继承的使用以及组件的使用 2019-07-24
- Python-16-继承、封装、多态 2019-07-24
- python 之 面向对象基础(继承与派生,经典类与新式类) 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash