当前位置:
首页 > 编程开发 > Python基础教程 >
-
python基础教程之python基础(24):面向对象三大特性一(继承)(2)
本站最新发布 Python从入门到精通|Python基础教程
试听地址 https://www.xin3721.com/eschool/pythonxin3721/
'
def look_after_house(self):
print('汪汪叫')
# ######### 执行 #########
c1 = Cat('小白家的小黑猫')
c1.eat()
c2 = Cat('小黑的小白猫')
c2.drink()
d1 = Dog('胖子家的小瘦狗')
d1.eat()
试听地址 https://www.xin3721.com/eschool/pythonxin3721/
'
在开发程序的过程中,如果我们定义了一个类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.
栏目列表
最新更新
python基础(23):面向过程与面向对象的优劣
python基础(24):面向对象三大特性一(继承
python基础(25):面向对象三大特性二(多态、
tesseract-OCR + pytesseract安装
Python爬虫(学习准备)
Python输出16进制不带0x补零,整数转16进制
vue添加图片
闭包函数与装饰器
python基础-闭包函数和装饰器
restframework详细
.Net Standard(.Net Core)实现获取配置信息
Linux PXE + Kickstart 自动装机
Shell 编程 基础
Shell 编程 条件语句
CentOS8-网卡配置及详解
Linux中LVM逻辑卷管理
1.数码相框-相框框架分析(1)
Ubuntu armhf 版本国内源
Linux中raid磁盘阵列
搭建简易网站
mysql 安装了最新版本8.x版本后的报错:
Mysql空间数据&空间索引(spatial)
如何远程连接SQL Server数据库的图文教程
复制SqlServer数据库的方法
搜索sql语句
sql中返回参数的值
sql中生成查询的模糊匹配字符串
数据定义功能
数据操作功能
将Session值储存于SQL Server中