Python面向对象的三大特征 --- 封装、继承、多态
一、封装
1)封装:是面向对象的一大特点;将属性和方法封装在一个抽象类中。外界使用类创建对象,然后让对象调用内部方法。对象方法的细节都被封装在类的内部。
class Person():
def __init__(self,name,weight): # 初始化方法
self.name = name
self.weight = weight
def __str__(self): # 定义返回方法
return 'my name is %s,my weight is %.2f.' %(self.name,self.weight)
def run(self): # 定义跑步方法
self.weight -= 0.5
print '每次跑步会减重0.5公斤。'
def eat(self): # 定义吃方法
self.weight += 1.0
print '每次吃东西会增重1.0公斤'
# 创建类的实例化对象,并调用方法
ming = Person('小明',65)
ming.run()
ming.eat()
print ming
lili = Person('lili',45)
lili.run()
print lili
2)举例1:
需求:摆放家具
1、房间有户型,总面积和家具名称列表。新房间五家具
2、家具上有名字和占地面积
3、将家具添加在房子中
解析如下:
# 定义一个家具类。有姓名和占地面积的属性;
class fortn():
def __init__(self,name,area):
self.name = name
self.area = area
def __str__(self):
return '%s的占地面积是%.2f' %(self.name,self.area)
# 定义房子类。有户型、总面积、剩余面积、家具的属性;方法为添加家具
class home():
def __init__(self,name,area):
self.name = name
self.area = area
self.leaveArea = area # 剩余面积初始值为总面积
self.fortn_list = []
def __str__(self):
return '户型:%s ,总面积:%.2f ,剩余面积:%.2f , 家具:%s' %(self.name,self.area,self.leaveArea,self.fortn_list)
def add_thing(self,argc):
print "要添加%s" %argc.name
if self.leaveArea < argc.area:
print "%s占地面积太大,不能添加" %argc.name
return
self.fortn_list.append(argc.name)
self.leaveArea -= argc.area
# 创建家具对象
bed = fortn('bed',4)
chest = fortn('chest',2)
table = fortn('table',1.5)
# 创建房子对象
my_house = home('两室一厅',200)
my_house.add_thing(bed)
my_house.add_thing(chest)
my_house.add_thing(table)
print my_house
举例2:
需求:士兵有枪,当枪里有子弹才可以射击
解析如下:
# 创建枪类
class Gun():
def __init__(self,model):
self.model = model
self.bullet_count = 0
def shoot(self):
if self.bullet_count <= 0:
print "%s没有子弹" %self.model
return
self.bullet_count -= 1
print '发射一次,子弹还有%s' %self.bullet_count
def add_bullet(self,count):
self.bullet_count += count
# 创建士兵类
class Sodlier():
def __init__(self,name):
self.name = name
self.gun = None # 当属性不确定的时候,可以使用None来初始化
def fire(self):
if self.gun == None:
print "%s还没有枪" %self.name
print "go to fire!%s" %self.name
self.gun.add_bullet(10)
self.gun.shoot()
# 定义枪对象
ak47 = Gun('AK47')
# ak47.add_bullet(10)
# ak47.shoot()
# 定义士兵对象
ryan = Soldier('Ryan')
ryan.gun = ak47
ryan.fire()
print ryan.gun
二、继承
1)继承实现的是代码的重用,相同部分代码不需要重写,分为单继承和多继承。多继承:一个子类可以继承多个父类。
2)单继承:一个子类只能继承一个父类
class Animal():
def call(self):
print "我会叫"
def run(self):
print "我会跑"
# 定义子类Cat,并重写父类的call方法
class Cat(Animal):
def call(self): # 由于和父类中的call方法重名,所以实现重写
print "我会喵喵叫~~~"
# 定义HelloKitty子类,继承Cat类
class HelloKitty(Cat):
def speak(self):
print "我会说"
# 创建对象
tom = HelloKitty()
tom.run() # 在子类中没有定义run方法,但在父类和祖父类中有
tom.call()
tom.speak()
3)多继承:一个子类可以有多个父类
# 定义父类1
class A():
def test(self):
print "A ---> test"
def demo(self):
print "A ---> demo"
# 定义父类2
class B():
def test(self):
print "B ---> test"
def demo(self):
print "B ---> demo"
# 定义子类C,继承父类A和B的方法和属性
class C(A,B):
# 当父类中的方法同名时,按括号中父类的先后顺序继承
pass
# 定义子类的实例化对象
c = C()
c.test() # 此时调用的均为父类A的结果
c.demo()
4)继承中的重写问题:在开发过程中,若父类方法和子类方法的实现完全不同,可以重写父类方法,实现方法覆盖。
# 定义父类
class Animal():
def call(self):
print "我会叫"
def run(self):
print "我会跑"
# 定义子类Cat,并重写父类的call方法
class Cat(Animal):
def call(self): # 由于和父类中的call方法重名,所以实现重写
print "我会喵喵叫~~~"
tom.run() # 此时可以使用创建出来的对象,调用父类的方法
# 创建对象
tom = Cat()
tom.call() # 此时,调用call显示的为:我会喵喵叫
5)继承中的扩展问题 class Animal(): def call(self): print "我会叫" def run(self): print "我会跑" # 定义子类Cat,并重写父类的call方法 class Cat(Animal): def call(self): # 由于和父类中的call方法重名,所以实现重写 print "我会喵喵叫~~~" # 创建对象 tom = Cat() tom.call() # 此时,调用call显示的为:我会喵喵叫
三、多态
1)同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果
class Dog(object):
def __init__(self,name):
self.name = name
def game(self):
print "%s是一只普通的狗" %self.name
class amazing(Dog):
def game(self):
print "%s是一只神奇的狗" %self.name
class Person(object):
def __init__(self,name):
self.name = name
def game_with_dog(self,dog):
print "%s和%s快乐地玩耍" %(self.name,dog.name)
dog.game()
wangcai = amazing("旺财")
xiaoming = Person("小明")
xiaoming.game_with_dog(wangcai)
Python面向对象的三大特征 --- 封装、继承、多态的更多相关文章
- JAVA的三大特征 封装继承多态- 简单总结
简单总结一下 封装-即从很多类的抽取相同的代码 写在一个类里. 好处是 代码的重用,安全. 继承-减少代码的书写. 其好处也是 代码的重用. 多态- 把不同的子类对象都当作父类来看,可以屏蔽不同子类对 ...
- python 面向对象的三大特征之 继承
#继承 #object 基类,是python定义的所有类的父类 #经典类:不继承object的类称作经典类 #新式类:继承object的类称作新式类 #python 3.x统一为新式类 #经典类是类对 ...
- python面向对象的三大特征--封装
#coding:utf-8 __author__="tang" #第一个层面的封装:类就是麻袋,本身就是一种封装 #第二个层面的封装:类中定义私有的,只在类的内部使用,外部无法访问 ...
- Python面向对象初始(三大特征,多态,继承,封装)
Python面向对象的初始 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的 ...
- Python - 面向对象编程 - 三大特性之继承
继承 继承也是面向对象编程三大特性之一 继承是类与类的一种关系 定义一个新的 class 时,可以从某个现有的 class 继承 新的 class 类就叫子类(Subclass) 被继承的类一般称为父 ...
- Java三大特性(封装,继承,多态)
Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...
- OOP三大核心封装继承多态
OOP支柱 3 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用 ...
- python面向对象的三大特征
1.封装: 封装就是对类和对象的成员访问进行限制,设定可以访问的方式和不可以访问的方式. 分类: 私有化的封装:当前类/对象种可以使用,类/对象外和子类/对象都不可以用 受保护的封装:当前类/对象和子 ...
- C++三大特性 封装 继承 多态
C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对 ...
随机推荐
- 【虚拟机】linux 桥接模式 固定静态IP
1:在root用户下修改 2:进入root用户下 vim/etc/sysconfig/network-scripts/ifcfg-eth0 2.修改完保存退出 3.重启网络服务:service net ...
- 20145312 实验五 《Java网络编程》
20145312 实验五<Java网络编程> 一. 实验内容及要求 实验内容: 运行下载的TCP代码,结对进行,一人服务器,一人客户端: 利用加解密代码包,编译运行代码,一人加密,一人解密 ...
- POJ-2418 Hardwood Species(二叉搜索树)
思路就是先将每个单词存进二叉树中,没出现一次,修改该单词所在结点的cnt++: 最后通过递归中序遍历输出结果. 思路很清晰,主要注意一下指针的使用,想一想为什么要这么用? 简单的解释就是,insert ...
- Vue中使用百度地图——设置地图标注
知识点:创建Map实例,为指定的位置设置标注 参考博客:https://www.cnblogs.com/liuswi/p/3994757.html 1.效果图:初始化地图,设置指定经纬度为地图中心点坐 ...
- LeetCode——merge-two-sorted-lists
Question Merge two sorted linked lists and return it as a new list. The new list should be made by s ...
- Flink快速入门
文章目录 1 安装:下载并启动 1.1 下载 1.2 启动一个local模式的Flink集群 2 运行例子 3 集群模式安装 4 Flink on YARN 安装:下载并启动 Flink可以在Linu ...
- UVA 814 The Letter Carrier's Rounds(JAVA基础map)
题解:就是按照题目模拟就好 但是这个题目让我发现了我Java里面许多问题 具体看代码,但是还是分为这几个方面 属性的作用域问题,缓冲区问题,map与list映射的问题,输出多个空格不一定是/t,反转思 ...
- 【乱码】Request QueryString 编码,传值乱码的几种情况和解决办法(单页,多页)
自己的项目还好,合作接口神马的传值乱码是很常见的. 遇到了几次这种恶心情况,积累了一点经验,有不对的地方欢迎指正. 乱码原因: 一般来说,常用的编码不是utf-8就是gb2312,一样的 HttpUt ...
- jquery validate检验
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 【Python】学习笔记之函数
Python函数 在Python中,一切皆为对象,函数也可以赋给一个变量,就是指向一个函数对象的引用,相当于给这个函数起了一个“别名”: >>> a = max >>&g ...