当前位置:
首页 > temp > 简明python教程 >
-
python基础(24):面向对象三大特性一(继承)(2)
'
def look_after_house(self):
print('汪汪叫')
# ######### 执行 #########
c1 = Cat('小白家的小黑猫')
c1.eat()
c2 = Cat('小黑的小白猫')
c2.drink()
d1 = Dog('胖子家的小瘦狗')
d1.eat()
在开发程序的过程中,如果我们定义了一个类A,然后又想新建立另外一个类B,但是类B的大部分内容与类A的相同时。
我们不可能从头开始写一个类B,这就用到了类的继承的概念。
通过继承的方式新建类B,让B继承A,B会‘遗传’A的所有属性(数据属性和函数属性),实现代码重用。
- class Animal:
- '''
- 人和狗都是动物,所以创造一个Animal基类
- '''
- def __init__(self, name, aggressivity, life_value):
- self.name = name # 人和狗都有自己的昵称;
- self.aggressivity = aggressivity # 人和狗都有自己的攻击力;
- self.life_value = life_value # 人和狗都有自己的生命值;
- def eat(self):
- print('%s is eating'%self.name)
- class Dog(Animal):
- pass
- class Person(Animal):
- pass
- egg = Person('egon',10,1000)
- ha2 = Dog('二愣子',50,1000)
- egg.eat()
- ha2.eat()
提示:用已经有的类建立一个新的类,这样就重用了已经有的软件中的一部分设置大部分,大大生了编程工作量,这就是常说的软件重用,不仅可以重用自己的类,也可以继承别人的,比如标准库,来定制新的数据类型,这样就是大大缩短了软件开发周期,对大型软件开发来说,意义重大。
1.4 派生
当然子类也可以添加自己新的属性或者在自己这里重新定义这些属性(不会影响到父类),需要注意的是,一旦重新定义了自己的属性且与父类重名,那么调用新增的属性时,就以自己为准了。
- class Animal:
- '''
- 人和狗都是动物,所以创造一个Animal基类
- '''
- def __init__(self, name, aggressivity, life_value):
- self.name = name # 人和狗都有自己的昵称;
- self.aggressivity = aggressivity # 人和狗都有自己的攻击力;
- self.life_value = life_value # 人和狗都有自己的生命值;
- def eat(self):
- print('%s is eating'%self.name)
- class Dog(Animal):
- '''
- 狗类,继承Animal类
- '''
- def bite(self, people):
- '''
- 派生:狗有咬人的技能
- :param people:
- '''
- people.life_value -= self.aggressivity
- class Person(Animal):
- '''
- 人类,继承Animal
- '''
- def attack(self, dog):
- '''
- 派生:人有攻击的技能
- :param dog:
- '''
- dog.life_value -= self.aggressivity
- egg = Person('egon',10,1000)
- ha2 = Dog('二愣子',50,1000)
- print(ha2.life_value)
- print(egg.attack(ha2))
- print(ha2.life_value)
注意:像ha2.life_value之类的属性引用,会先从实例中找life_value然后去类中找,然后再去父类中找...直到最顶级的父类。
在子类中,新建的重名的函数属性,在编辑函数内功能的时候,有可能需要重用父类中重名的那个函数功能,应该是用调用普通函数的方式,即:类名.func(),此时就与调用普通函数无异了,因此即便是self参数也要为其传值。
在python3中,子类执行父类的方法也可以直接用super方法。
- class A:
- def hahaha(self):
- print('A')
- class B(A):
- def hahaha(self):
- super().hahaha()
- #super(B,self).hahaha()
- #A.hahaha(self)
- print('B')
- a = A()
- b = B()
- b.hahaha()
- super(B,b).hahaha()
- class Animal:
- '''
- 人和狗都是动物,所以创造一个Animal基类
- '''
- def __init__(self, name, aggressivity, life_value):
- self.
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数