python面向对象基础-封装
类
1、特征即是属性2、行为即是方法
class obj():代码....
语法:对象名 = 类名()
#需求:洗衣机,功能:洗衣服#定义洗衣机类
class Washer():def wash(self):print("能洗衣服")#创建对象
haier = Washer()#3.验证成果
#使用wash功能 --实例方法/对象方法 -- 对像名.Wash()
#类里面定义的函数称为实例方法
haier.wash()
注意:类里面定义的函数称为实例方法
class Washer():def wash(self):print('洗衣服')print(self)haier = Washer()
print(haier)haier.wash()#
# 1.一个类可以创建多个对象
#2.多个对象都调用函数的时候,self地址相同
class Washer():def wash(self):print('洗衣服')print(self)harer1 = Washer()
harer1.wash()
harer2 = Washer()
harer2.wash()
添加和获取对象属性
属性即使特征,比如:洗衣机的宽度、高度、重量....对象属性既 可以在类外面添加和获取,也能在类里面添加和获取。
类外面添加对象属性
语法对象名.属性名 = 值
类外面获取对象属性
语法对象名.属性名
class Washer():def wash(self):print('洗衣服')haier1 = Washer()# 对象名.属性名 = 值
haier1.width = 400
haier1.height = 500#对象名.属性名
print(f'haier1洗衣机的宽度是{haier1.width}')
print(f'haier1洗衣机的高度是{haier1.height}')
类里面获取对象属性
#定义类
class Washer():def wash(self):print('洗衣机')def print_info(self):#self.属性名# print(self.width)# print(self.height)print(f'洗衣机的宽度{self.width}')print(f'洗衣机的高度{self.height}')haier1 = Washer()#添加属性
haier1.width = 400
haier1.height = 500
haier1.wash()#对象调用方法
haier1.print_info()
魔法方法
#目标:定义init魔法方法设置初始化属性 并访问调用
"""
1.定义类init魔法方法:width 和 height添加实例方法:访问实例属性2.创建对象
3.验证成果
"""class Washer():def __init__(self):#添加实例属性self.width = 500self.height = 800def print_info(self):print(f'洗衣机的宽度是{self.width}')print(f'洗衣机的宽度是{self.height}')haier = Washer()
haier.print_info()
_init_()方法,在创建一个对象时默认被调用,不需要手动调用。
_init_(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递过去。
#1.定义类:带参数的init:宽度和高度:实例方法:调用实例属性
class Washer():def __init__(self,width,height):self.widht = widthself.height = heightdef print_info(self):print(f'洗衣机的宽度{self.widht},洗衣机的高度{self.height}')#2.创建对象,创建多个对象且属性值不同:调用实例方法
haier1 = Washer(10,20)
haier1.print_info()haier2 = Washer(100,200)
haier2.print_info()
当使用print输出对象打的时候,默认打印对象的内存地址。如果类定义了_str_方法,那么就会打印从在这个方法中return的数据。
class Washer():def __init__(self):self.width = 300def __str__(self):return '解释说明:类的说明或对象状态的说明'haier = Washer()
print(haier) #解释说明:类的说明或对象状态的说明
class Washer():def __init__(self):self.width = 300#自动调用def __del__(self):print('对象一已经删除')haier = Washer()
1.被烤的时间和对应的地瓜状态0-3分钟:生的3-5分钟:半生熟5-8分钟:熟的超过8分钟:烤糊了2.添加调料用户按自己的意愿添加调用
定义类地瓜的属性被烤的时间地瓜的状态添加的调料地瓜的方法被烤用户根据意愿设定每次烤地瓜的时间判断地瓜被烤的总时间是在哪个区间,修改地瓜状态添加调料用户根据意愿设定添加的调料将用户添加的调料存储显示对象信息
class SweetPotato():def __init__(self):#定义属性:成员变量#被烤的时间self.cook_time = 0#烤的状态self.cook_state = '生的'#调料列表self.condiments = []#定义方法:成员函数def cook(self,time):"""烤地瓜方法"""#1.先计算地瓜整体考过的时间self.cook_time += time#2.用整体烤过的时间在判断地瓜的状态if 0 <= self.cook_time < 3:#生的self.cook_state = '生的'elif 3 <= self.cook_time <5:#半生不熟self.cook_state = '半生不熟'elif 5 <= self.cook_time < 8:#熟了self.cook_state = '熟了'elif self.cook_time >= 8:#烤糊了self.cook_state = '烤糊了'def add_condiments(self,condiment):#用户意愿的调料追加到调料列表self.condiments.append(condiment)def __str__(self):return f'这个地瓜的被烤过的时间是{self.cook_time}分钟,' \f'状态是{self.cook_state},调料有{self.condiments}'#2.创建对象并调用对应的实例方法
digua1 = SweetPotato()
print(digua1)digua1.cook(2)
digua1.add_condiments('辣椒')
print(digua1)#多次调用测试时间是否相加
digua1.cook(2)
digua1.add_condiments('酱油')
print(digua1)
将小于房子剩余面积的家具摆放到房子中
需求涉及两个事务:房子和家具,故该案例涉及两个类:房子类和家具类
实例属性房子地理位置房子占地面积房子剩余面积房子内家具列表实例方法容纳家具显示房屋信息
家具名称家具占地面积
#家具类
class Furniture():def __init__(self,name,area):#家具名字self.name = name#家具占地面积self.area = area
#定义房屋类
class Home():def __init__(self,address,area):#地理位置self.address = address#房屋面积self.area = area#剩余面积self.free_area = area#家具列表self.furniture = []def __str__(self):return f'房子地理位置在{self.address},' \f'房屋面积是{self.area},剩余面积{self.free_area},家具有{self.furniture}'def add_furniture(self,item):"""容纳家具"""#如果 家具占地面积 <= 房子剩余面积: 可以搬入(家具列表添加家具名字数据并将房子剩余面积更新:# 房屋剩余面积 - 该家具的占地面积# 否则:提示用户家具太大,剩余面积不足,无法容纳# )if item.area <= self.free_area:self.furniture.append(item.name)self.free_area -= item.areaelse:print('用户家具太大,剩余面积不足,无法容纳')#双人床, 6
bed = Furniture('双人床',6)
sofa = Furniture('沙发',10)#房子1:北京 2.上海
jia1 = Home('北京',1000)
print(jia1)#开始般家具
jia1.add_furniture(bed)
print(jia1)ball = Furniture('游泳池',2000)
jia1.add_furniture(ball)
print(jia1)
面向对象基础总结
class 类名():代码
对象名 = 类名()
对象名 = 类名
self.属性名 = 值
对象名.属性名
self.属性名
魔法方法
_init_():初始化_str_():输出对象信息_del_():删除对象时调用
python面向对象基础-封装相关推荐
- Python面向对象基础(上)—Python Day7
导入 --Python面向对象基础 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 面向对象 ...
- Python面向对象基础示例_创建对象
Python面向对象基础示例_创建对象 python是面向对象的语言,你可以很轻松的创建一个类和对象.本书代码源自<<Python 3 Object-Oriented Programmin ...
- Python面向对象二 封装与修饰器
Python面向对象二 封装与修饰器 1. 特殊方法 2. 封装 2.1 封装的引入 2.2 封装实例一 2.3 封装实例二 3. property装饰器 1. 特殊方法 • 在类中可以定义一些特殊方 ...
- Python 面向对象 基础
编程范式概述: 面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实 ...
- python面向对象编程(封装与继承)
一. 面向过程编程语言 "面向过程"(Procedure Oriented)是一种以过程为中心的编程思想.分析出解决问题所需要的步 骤,然后用函数把这些步骤一步一步实现,使用的时候 ...
- Python面向对象基础:编码细节和注意事项
在前面,我用了3篇文章解释python的面向对象: 面向对象:从代码复用开始 面向对象:设置对象属性 类和对象的名称空间 本篇是第4篇,用一个完整的示例来解释面向对象的一些细节. 例子的模型是父类Em ...
- python 面向对象之封装与类与对象
封装 一,引子 从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小猫,小狗,小王八,小老虎一起装进麻袋,然后把麻袋封上口子.照这种逻辑看,封装='隐藏',这种理解是相当片面的 二,先看如何隐藏 在 ...
- python面向对象之封装、继承与多态
目录 面向对象程序设计 类和对象 属性查找 数据属性 实例属性 类的封装 封装数据 封装⽅法(隔离复杂度) 类的⽅法 类的继承 继承概述 单继承 多继承 ⽅法重写 继承原理 深度优先&⼴度优先 ...
- python面向对象编程 -- 封装、继承
面向对象编程 -- 封装.继承 面向对象编程三要素:封装.继承和多态.本文主要看和封装.继承相关的概念:在python中多态的概念比较模糊,本文不做讨论. 1 封装 封装:将数据和操作组装到一起,对外 ...
最新文章
- 谁来理解外来工的孩子的心理健康?
- Ubuntu系统全盘备份与恢复,亲自总结,实测可靠
- Emacs+hideif.el 隐藏预编译代码(或彩色显示预编译代码)
- Spring: @Import @ImportResource引入资源
- java 生成一个空文件系统_如何使用java创建一个空白的PPT文档?
- python 路径拼接字符串_anaconda环境变量添加 python笔记
- 2020年1月1日起,谷歌 Patch Rewards 计划将降低准入门槛,提升开源项目的安全性...
- [MATLAB/编程]报童的诀窍/报童问题-图解法和二分法
- Python实现泛微OA云桥未授权任意文件读取
- 以太网通信协议UDP
- Dubbo服务暴露流程
- python统计套利_统计套利——反转定律
- Keepalived配置报错Unicast peers are not supported in strict mode
- 移动端自动化任务-AutoJs Pro v9使用教程(一)
- 学习笔记——Python输入与输出
- vijos-1199,核弹危机
- win10光盘刻录linux镜像,解决win10系统刻录iso镜像系统光盘的技巧
- 随笔之与潇哥交谈1h12min内容//2021-1-28【最后一个寒假作业】
- 复旦大学硕士盲审 计算机学院,上海市硕士论文盲审 复旦大学论文抽检、盲审工作的通知...
- javapoet动态生成java代码
热门文章
- PD诱骗取电芯片XSP16支持PD3.1协议+PD+QC+AFC全协议,支持28V5A诱导电压
- 深度学习 Feeding behavior recognition for group-housed pigs with the Faster R-CNN 论文篇
- 看完弗格森自传 随便记录下
- 哪些开源协议的项目可以在商业项目中使用
- 举个栗子!Tableau技巧(39):巧妙制作分类桑基图
- Python实用案例,Python脚本,Python实现批量加水印
- Qihoo的未来究竟会怎样?
- Docker 入门到实战教程(一)介绍Docker
- app实现热更新codepush
- linux网卡ens160显示不出来,centos8将网卡名ens160修改为eth0