一、理解面向对象
(一)理解面向对象的举例
为了方便了解,拿面向过程做一个对比
- 面向过程:去超市--买菜--买肉--买米--回家--洗菜--切肉--炒菜--煮米饭--盛饭--开吃
- 面向对象:点外卖
- 总结:面向对象就是将编程当成是一个事物,对外界来说,事物是直接使用的,不用去管他内部情况。而编程就是设置事物能够做什么事情。
(二)类和对象
思考:打电话需要用手机,这个手机就是一个对象,这个对象哪来的呢?
答:它是制造出来的
思考:怎么制造的?
答:先构图纸,再生产
在面向对象编程过程中,有两个重要组成部分:类 和 对象。
- 类和对象的关系:用类去创建一个对象。
1、类
类是对一系列具有相同特征和行为的事物的统称,是一个抽象的概念,不是真实存在的事物
- 特征即是属性
- 行为即是方法
类比如是制造洗衣机时要用到的图纸,也就是说类是用来创建对象的
2、对象
对象是类创建出来的真实存在的事物,例如:手机。
注意:开发中,先有类,再有对象。
二、面向对象实现方法
语法
class 类名(): 代码 pass
注意:类名要满足标识符命名规则。同时遵循驼峰命名习惯
代码体验
class My_Project(): print("我是第一个类") My_Project()
(一)创建对象
语法
# 变量名 = 类名()
实例
class My_Phone(): def call_tel(self): print("正在打电话") def play_game(self): print("正在打游戏") # 创建对象 apple = My_Phone() print(apple) # 调用对象的实例方法 apple.play_game()
- 创建对象的过程也叫实例化对象
(二)self
- self代表类的实例
- 类的方法与普通的函数只有一个特别的区别--它们必须有一个额外的第一个参数名称,按照惯例它的名称是self。
(三)添加和获取对象属性
- 属性即是特征,比如:手机的颜色,大小,重量...
- 对象属性即可以在类外面添加和获取,也能在类里面添加和获取。
1、类外面添加对象属性
语法
对象名,属性名 = 值
class My_Phone(): def main(self): pass apple = My_Phone() apple.width = 10 apple.heigth = 15 print(apple.width) print(apple.heigth) -------------------------- 10 15
2、类里面获取对象属性
class My_Phone(): def main(self,): print(f"手机的宽是{self.width}") print(f"手机的高是{self.heigth}") apple = My_Phone() apple.width = 10 apple.heigth = 15 apple.main() -------------------------------- 手机的宽是10 手机的高是15
三、魔术方法
在Python中,__xx__()的函数叫做魔法方法,指的是具有特殊功能的函数。
(一)__init__()
手机的尺寸大小生来就有,那么能不能在生产之前就赋予属性呢?
__init__():初始化对象
class My_Phone(): def __init__(self): self.width = 10 self.heigth = 15 def demo(self): print("手机的宽是",self.width) print("手机的高是",self.heigth) apple = My_Phone() apple.demo() -------------------------- 手机的宽是 10 手机的高是 15
- 定义多个方法
class My_Phone(): def __init__(self,width,heigth): self.width = width self.heigth = heigth def app_phone(self,name): print(f"手机是{name},手机的宽是",self.width) print(f"手机是{name},手机的高是",self.heigth) def huawei_phone(self,name): print(f"手机是{name},手机的宽是", self.width) print(f"手机是{name},手机的高是", self.heigth) apple = My_Phone(10,15) apple.app_phone("苹果") huawei = My_Phone(20,40) huawei.huawei_phone("华为") ---------------------------- 手机是苹果,手机的宽是 10 手机是苹果,手机的高是 15 手机是华为,手机的宽是 20 手机是华为,手机的高是 40
(二)__str__()
当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了str方法,那么就会打印从在这个方法中return的数据
解释类的属性或作用
class My_Phone(): def __init__(self): self.width = 10 self.heigth = 15 def __str__(self): return (f"手机的宽是{self.width},高度是{self.heigth}") a = My_Phone() print(a) -------------------------- 手机的宽是10,高度是15
(三)__del__()
当删除对象时,Python解释器也会默认调用__del__()方法,在对象销毁的时候被调用,当对象不再被使用时,__del__()方法运行:
class Demo(): def __init__(self,width,heigth): self.width = width self.heigth = heigth def __del__(self): print("对象已经删除") a = Demo(10,20) --------------- 对象已经删除
四、类属性与方法
(一)类的私有属性
__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问
class Demo(): __num = 0 # 私有变量 result =0 # 公开变量 def count(self): self.__num += 1 self.result += 1 print(self.__num) run = Demo() run.count() run.count() print(run.result) print(run.__num) # 报错 ----------------------- 1 2 2
五、综合应用-烤地瓜
需求涉及一个事物:地瓜,故案例涉及一个类:地瓜类
- 地瓜的属性
-- 被烤的时间
-- 地瓜的状态
-- 添加的调料
- 地瓜的方法
被烤
-- 用户根据意愿设定每次烤地瓜的时间
-- 判断地瓜被烤的总时间是在哪个区间,修改地瓜状态
添加调料
-- 用户根据意愿设定添加的调料
-- 将用户添加的调料存储
- 显示对象信息
需求
1、被烤的时间和对应的地瓜状态:
0 - 5 分钟:生的
5 - 10 分钟:半生不熟
10 - 12 分钟:烤熟了
超过12分钟:烤糊了
2、添加调料:
辣椒,孜然,盐
- 实例代码
class Kao_Digua(): def __init__(self): self.cook_time = 0 self.state = "生的" self.seasoning = [] def cook(self,time): self.cook_time +=time if 0 <= self.cook_time <5: self.state = "生的" if 5 <= self.cook_time < 10: self.state = "半生不熟" if 10 <= self.cook_time < 15: self.state = "地瓜熟了" if self.cook_time>=15: self.state = "地瓜糊了" def add_seasoning(self,*name): self.seasoning.append(name) def __str__(self): return (f"当前的地瓜考了--{self.cook_time}--分钟,它的状态是--{self.state}--,添加的调料是--{self.seasoning}--") a = Kao_Digua() a.cook(10) a.add_seasoning("辣椒","孜然","盐") print(a) --------------------------------------------------------------- 当前的地瓜考了--10--分钟,它的状态是--地瓜熟了--,添加的调料是--[('辣椒', '孜然', '盐')]--
标签:__,--,self,面向对象,print,手机,def From: https://www.cnblogs.com/LoLong/p/16754383.html