面向对象就是将编程当成一个事务,对外界来说,事务是直接使用,不用去管他内部的情况。而编程就是设置事务能够做什么事。

类是对一系列具有 相同特征和行为的事务的统称,是一个抽象的概念,不是真实存在的事务。类是用来创建对象的。
1、特征即是属性
2、行为即是方法
语法:
class obj():代码....
注意:类名要满足标识符命名规则,同时遵循大驼峰命名规则
对象
对象(实例)是类创建出来的真实存在的事物。
语法:
对象名 = 类名()
示例:

#需求:洗衣机,功能:洗衣服#定义洗衣机类
class Washer():def wash(self):print("能洗衣服")#创建对象
haier = Washer()#3.验证成果
#使用wash功能 --实例方法/对象方法 -- 对像名.Wash()
#类里面定义的函数称为实例方法
haier.wash()
注意:类里面定义的函数称为实例方法

类里面的self参数
class Washer():def wash(self):print('洗衣服')print(self)haier = Washer()
print(haier)haier.wash()#
结论
由于打印对象和打印self得到的内存地址相同,所以 self指的是调用该函数的对象
案例测试
1.一个类可以创建多个对象?——可用
2.多个对象都调用函数的时候,self地址相同——不同
# 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()

魔法方法

在python中,_xx_()的函数叫做魔法方法,指的是具有特殊功能的函数。
_init_()方法的作用: 初始化对象
#目标:定义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解释器会自动把当前的对象引用传递过去。
带参数的_init_()
当一个类需要创建多个对象,需要对不同对象设置不同的初始值属性时,可 以 使用传参的方式实现。
#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()
_str_()

当使用print输出对象打的时候,默认打印对象的内存地址。如果类定义了_str_方法,那么就会打印从在这个方法中return的数据。
class Washer():def __init__(self):self.width = 300def __str__(self):return '解释说明:类的说明或对象状态的说明'haier = Washer()
print(haier) #解释说明:类的说明或对象状态的说明
_del_()
当删除对象时,python解释器也会 默认调用_del_()_方法
class Washer():def __init__(self):self.width = 300#自动调用def __del__(self):print('对象一已经删除')haier = Washer()
面向对象综合应用
1.烤地瓜
需求:
1.被烤的时间和对应的地瓜状态
0-3分钟:生的
3-5分钟:半生熟
5-8分钟:熟的
超过8分钟:烤糊了
2.添加调料
用户按自己的意愿添加调用
步骤分析
定义类
地瓜的属性
被烤的时间
地瓜的状态
添加的调料
地瓜的方法
被烤
用户根据意愿设定每次烤地瓜的时间
判断地瓜被烤的总时间是在哪个区间,修改地瓜状态
添加调料
用户根据意愿设定添加的调料
将用户添加的调料存储
显示对象信息
#1.定义类:初始化属性、被烤和添加调料的方法、显示对象信息的str

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)
2.搬家具
    需求
将小于房子剩余面积的家具摆放到房子中
步骤分析
需求涉及两个事务:房子和家具,故该案例涉及两个类:房子类和家具类
定义房子类
实例属性
房子地理位置
房子占地面积
房子剩余面积
房子内家具列表
实例方法
容纳家具
显示房屋信息
定义家具类
家具名称
家具占地面积
创建对象并调用相关方法
#家具类
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面向对象基础-封装相关推荐

  1. Python面向对象基础(上)—Python Day7

    导入 --Python面向对象基础 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 面向对象 ...

  2. Python面向对象基础示例_创建对象

    Python面向对象基础示例_创建对象 python是面向对象的语言,你可以很轻松的创建一个类和对象.本书代码源自<<Python 3 Object-Oriented Programmin ...

  3. Python面向对象二 封装与修饰器

    Python面向对象二 封装与修饰器 1. 特殊方法 2. 封装 2.1 封装的引入 2.2 封装实例一 2.3 封装实例二 3. property装饰器 1. 特殊方法 • 在类中可以定义一些特殊方 ...

  4. Python 面向对象 基础

    编程范式概述: 面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实 ...

  5. python面向对象编程(封装与继承)

    一. 面向过程编程语言 "面向过程"(Procedure Oriented)是一种以过程为中心的编程思想.分析出解决问题所需要的步 骤,然后用函数把这些步骤一步一步实现,使用的时候 ...

  6. Python面向对象基础:编码细节和注意事项

    在前面,我用了3篇文章解释python的面向对象: 面向对象:从代码复用开始 面向对象:设置对象属性 类和对象的名称空间 本篇是第4篇,用一个完整的示例来解释面向对象的一些细节. 例子的模型是父类Em ...

  7. python 面向对象之封装与类与对象

    封装 一,引子 从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小猫,小狗,小王八,小老虎一起装进麻袋,然后把麻袋封上口子.照这种逻辑看,封装='隐藏',这种理解是相当片面的 二,先看如何隐藏 在 ...

  8. python面向对象之封装、继承与多态

    目录 面向对象程序设计 类和对象 属性查找 数据属性 实例属性 类的封装 封装数据 封装⽅法(隔离复杂度) 类的⽅法 类的继承 继承概述 单继承 多继承 ⽅法重写 继承原理 深度优先&⼴度优先 ...

  9. python面向对象编程 -- 封装、继承

    面向对象编程 -- 封装.继承 面向对象编程三要素:封装.继承和多态.本文主要看和封装.继承相关的概念:在python中多态的概念比较模糊,本文不做讨论. 1 封装 封装:将数据和操作组装到一起,对外 ...

最新文章

  1. 谁来理解外来工的孩子的心理健康?
  2. Ubuntu系统全盘备份与恢复,亲自总结,实测可靠
  3. Emacs+hideif.el 隐藏预编译代码(或彩色显示预编译代码)
  4. Spring: @Import @ImportResource引入资源
  5. java 生成一个空文件系统_如何使用java创建一个空白的PPT文档?
  6. python 路径拼接字符串_anaconda环境变量添加 python笔记
  7. 2020年1月1日起,谷歌 Patch Rewards 计划将降低准入门槛,提升开源项目的安全性...
  8. [MATLAB/编程]报童的诀窍/报童问题-图解法和二分法
  9. Python实现泛微OA云桥未授权任意文件读取
  10. 以太网通信协议UDP
  11. Dubbo服务暴露流程
  12. python统计套利_统计套利——反转定律
  13. Keepalived配置报错Unicast peers are not supported in strict mode
  14. 移动端自动化任务-AutoJs Pro v9使用教程(一)
  15. 学习笔记——Python输入与输出
  16. vijos-1199,核弹危机
  17. win10光盘刻录linux镜像,解决win10系统刻录iso镜像系统光盘的技巧
  18. 随笔之与潇哥交谈1h12min内容//2021-1-28【最后一个寒假作业】
  19. 复旦大学硕士盲审 计算机学院,上海市硕士论文盲审 复旦大学论文抽检、盲审工作的通知...
  20. javapoet动态生成java代码

热门文章

  1. PD诱骗取电芯片XSP16支持PD3.1协议+PD+QC+AFC全协议,支持28V5A诱导电压
  2. 深度学习 Feeding behavior recognition for group-housed pigs with the Faster R-CNN 论文篇
  3. 看完弗格森自传 随便记录下
  4. 哪些开源协议的项目可以在商业项目中使用
  5. 举个栗子!Tableau技巧(39):巧妙制作分类桑基图
  6. Python实用案例,Python脚本,Python实现批量加水印
  7. Qihoo的未来究竟会怎样?
  8. Docker 入门到实战教程(一)介绍Docker
  9. app实现热更新codepush
  10. linux网卡ens160显示不出来,centos8将网卡名ens160修改为eth0