Python中的面向对象(类的实例化,面向对象的封装、继承与多态)
文章目录
- 1.面向对象的定义
- 1.1 定义类、属性和方法
- 1.2 如何将类转化为对象(实例化)
- 1.3 构造方法
- 2.面向对象的封装
- 2.1 封装的定义
- 2.2 封装的练习
- 1.体重与跑步
- 2.栈的功能封装
- 练习:房子面积与家具
- 3.面向对象的继承
- 3.1 继承的子类与父类
- 3.2 多继承
- 4. 私有属性和私有方法
- 5.面向对象的多态
1.面向对象的定义
oop = object oriented programming(面向对象程序设计)
1.1 定义类、属性和方法
class 类(): pass
类: 是一群具有相同特征或行为的事物的统称,类是抽象的,不能直接
使用
类: 属性(信息)和方法(能完成的事情)
1.2 如何将类转化为对象(实例化)
对象: 由类创造出来的具体存在
实例化指在面向对象编程中,使用类创建对象的过程称为实例化,是将一个抽象的概念具体化的过程
实例化过程中一般由类名 对象名 = 类名(参数1,参数2,…)
示例:
class people():name = 'leo'age = 20def eat(self):print('leo eats apple ')def walk(self):print('leo goes for a walk')p1 = people()
print(p1.name)
p1.eat()
1.3 构造方法
class People():def __init__(self):print('self',self)p1 = People()
print('p1',p1)
2.面向对象的封装
面向对象的封装,通过定义模板提高代码的复用性。
2.1 封装的定义
class People():def __init__(self,name,age):self.name = nameself.age = agedef __str__(self):return 'I am %s' %self.namedef run(self):print('%s is running' %self.name)p1 = People('leo',20)
print('p1:',p1.name)
p1.run()
print(p1)p2 = People('coco','18')
print('p2:',p2.name)
p2.run()
print(p2)
2.2 封装的练习
1.体重与跑步
1.小明和小美都爱跑步
2.小美体重45.0公斤
3.小明体重75.0公斤
4.每次跑步都会减少0.5公斤
5.每次吃东西都会增加1公斤
class People():def __init__(self,name,weight):self.name = nameself.weight = weightdef __str__(self):return 'My name is %s and weight is %.2f' %(self.name,self.weight)def run(self):print('%s is running.' %self.name)self.weight -= 0.5def eat(self):print('%s is eating.' %self.name)self.weight += 1xiaoming = People('xiaoming',75.0)
xiaoming.run()
print(xiaoming)xiaomei = People('xiaomei',45.0)
xiaomei.eat()
print(xiaomei)
2.栈的功能封装
class Stack(object):def __init__(self):self.stack = []def __len__(self):return len(self.stack)def top(self):if not self.is_empty():return self.stack[-1]raise Exception('Stack is empty')def push(self,element):self.stack.append(element)def pop(self):if self.is_empty():raise Exception('Stack is empty')else:item = self.stack.pop()return itemdef length(self):return len(self.stack)def is_empty(self):return len(self.stack) == 0stack = Stack()
stack.push(100)
stack.push(200)
print(stack.length())
item = stack.pop()
print('The pop item is :%s' %item)
print('The top item is:',stack.top())
print(stack.length())
print(stack.is_empty())
练习:房子面积与家具
class Furniture(object):def __init__(self,name,area):self.name = nameself.area = areadef __str__(self):return ('[%s]占地%.2f平米' %(self.name,self.area))class House(object):def __init__(self,type,area):self.type = typeself.area = areaself.free_area = areaself.fur_list = []def __str__(self):return ('户型:%s\n总面积:%.2f\n剩余面积:%.2f\n家具名称列表:%s'%(self.type,self.area,self.free_area,self.fur_list))def add_fur(self,item):self.fur_list.append(item.name)self.free_area -= item.areabed = Furniture('bed',4)
wardrobe = Furniture('wardrobe',2)
table = Furniture('table',1.5)house = House('villa',200)
house.add_fur(bed)
house.add_fur(wardrobe)
print(house)
3.面向对象的继承
继承描述的是事物之间的所属关系,定义一个类时,可以从某哪个现有的类继承
3.1 继承的子类与父类
新的类称为子类,扩展类(subclass),被继承的类称为基类、父类或超类(Baseclass、Superclass)
class Father(object):def __init__(self,name,age):self.name = nameself.age = agedef eat(self):print('%s is eating big apple' %self.name)def set_goal(self):print('%s sets a goal' %self.name)
注意:子类与父类有相同方法时,用子类的方法;方法不同时,用父类的方法
3.2 多继承
class D():def test(self):print('test in D...')
class C(D):pass# def test(self):# print('test in C...')
class B(D):pass# def test(self):# print('test in B...')
class A(B,C):pass# def test(self):# print('test in A...')
a = A()
a.test()
注意:在python3中默认新式类(object),是广度优先;在python2中是深度优先。
4. 私有属性和私有方法
注意:私有属性和私有方法一般在内部访问,用于测试等
class Student(object):def __init__(self,name,age):self.name = nameself.__age = agedef __get_info(self):print('%s is %s years old' %(self.name,self.__age))student1 = Student('xiaoming',10)
print(student1.name)
print(student1._Student__age)
student1._Student__get_info()
注意:可以通过间接使用的方法来外部调用
class Student(object):def __init__(self,name,age):self.name = nameself.__age = agedef __get_info(self):print('%s is %s years old' %(self.name,self.__age))def get_age(self):print(self.__age)def set_age(self,age):if 0 < age < 100:self.__age = ageprint('success!')else:raise Exception('Error!')student = Student('xiaoming',10)
student.set_age(80)
5.面向对象的多态
多态:当需要更多的子类时只需要继承父类,即同一个操作作用于不同的对象有不同的解释
扩展式开放:允许子类重写父类的方法或函数
对修改封闭:不重写,直接继承父类的函数
class Student():def get_score(self):print('Student score...')class Chinese():def get_score(self):print('Chinese score...')class Math():def get_score(self):print('Math score...')student1 = Student()
student2 = Chinese()
student3 = Math()
student1.get_score()
student2.get_score()
student3.get_score()
Python中的面向对象(类的实例化,面向对象的封装、继承与多态)相关推荐
- python中定义一个类、实例化时传入的参数如何传递_用实例分析Python中method的参数传递过程...
什么是method? function就是可以通过名字可以调用的一段代码,我们可以传参数进去,得到返回值.所有的参数都是明确的传递过去的. method是function与对象的结合.我们调用一个方法 ...
- Python中的元类是什么?
元类是什么,我们将它们用于什么? #1楼 请注意,此答案适用于2008年编写的Python 2.x,元类在3.x中略有不同. 元类是使"类"工作的秘诀. 新样式对象的默认元类称为& ...
- Python中的元类及元类实现的单例模式
https://www.cnblogs.com/tkqasn/p/6524879.html 在看一些框架源代码的过程中碰到很多元类的实例,看起来很吃力很晦涩:在看python cookbook中关于元 ...
- Python中的元类
Python中的元类 Python一切皆对象,所以类也是对象. 我们知道,对象是通过类实例化创建出来的.但我们创建类时并没有进行实例化操作,为什么类也是对象呢? 类既然是对象,类肯定是另外某个类的实例 ...
- python中用于释放类占用的资源的方法是()_编写一个简易计算器,要求根据输入的数字和四则运算符号,计算运算结果并输出。_学小易找答案...
[简答题]20191220 课前作业 新工作页4.1的3-5-3页的填空题,参考教材P135-P144 [简答题]AutoCAD改编视图,尽量不用虚线 1. 主视图采用局部剖,表达右上角小圆筒(及孔) ...
- python简介怎么写-python中如何写类
类的定义 Python中,定义类是通过class关键字,例如我们定义一个存储学生信息的类: class Student(object): pass class后面紧接着是类名,即Student,类名通 ...
- Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数)...
Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数) https://mubu.com/doc/1AqL_M0IbW 继承之钻石继承 多态 封装 几个装饰 ...
- Python中的property类和@property装饰器
Python中的property类和@property装饰器 在Python的类中,为了避免使用者直接在类的外部操作属性和方法,我们可以将属性和方法设置成私有属性和私有方法. 如果我们需要访问私有属性 ...
- python定义类的程序_python扫码签到程序python中如何定义类
什么是类? 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 什么是方法? 类中的函数即为方法 如何定义一个类? 定义类,语法格式如下: < ...
- Php扫码签到功能怎么实现,python扫码签到程序python中如何定义类
什么是类? 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 什么是方法? 类中的函数即为方法 如何定义一个类? 定义类,语法格式如下: < ...
最新文章
- 工作 10 年后转行程序员,如今 35+ 岁并不焦虑!
- Androidn Notification的使用,解决找不到setLatestEventInfo方法
- 【集训队作业2018】喂鸽子
- 1. 初探MongoDB —— 介绍、安装和配置
- Salt Master外部Job Cache配置
- 用java写jsp页面跳转页面跳转_五种 JSP页面跳转方法详解
- LINUX环境并发服务器的三种实现模型
- SQL删除重复数据并只保留一条
- layui参考文档地址
- win10系统的 3Dsmax2020 安装失败报错 1603 解决方案 亲测可用
- PowerManagerService分析-updatePowerStateLocked方法
- 赵小楼:《天道》《遥远的救世主》深度解析(28)人文意识发展到今天,我们应该怎么改变?
- 我的学习笔记001--private protected public internal mxx
- 【华为OD机试真题2023 JAVA】不含101的数
- 对象存储OSS之阿里云OSS介绍及开通
- Catalan 数之Python演示
- Unity之webGL问题汇总
- 迪赛智慧数——其他图表(平行坐标图):家庭未来资产配置意愿
- 计算机网络体系结构详解(7层、5层、4层的区别)
- R语言使用多个数据类型不同的向量数据创建一个dataframe数据对象、使用names函数查看dataframe数据的列名称
热门文章
- MyBatis 整合Oracle 报错:java.sql.SQLException: ORA-01008: 并非所有变量都已绑定
- devtools最新安装方法
- 华为机试真题 C++ 实现【机器人走迷宫】
- 区块链/以太坊/读书笔记/精通以太坊思维导图
- 『深度应用』OneFlow快速上手指南
- apache knox 安装使用步骤
- 商业项目中选择框架和库的原则
- Unity3D开发技术研究-SteamVR2.0
- 《小王子》80 周年:安东尼‧圣修伯里的笔下著名主人公进入元宇宙
- 对CAN/CAN-FD/ETH/Camera同步采集的数据采集工具软件