一、面向对象
为了方便了解,我们拿面向过程做一个对比
例如:肚子饿了,想吃饭 面向过程:去超市---买菜---卖肉---买米---回家---洗菜---切肉---炒菜---煮米饭---盛饭---开吃 面向对象:点外卖 总结:⾯向对象就是将编程当成是⼀个事物,对外界来说,事物是直接使⽤的,不⽤去管他内部的情况。⽽编程就是设置事物能够做什么事。
二、类和对象
思考:打电话需要用手机,这个手机就是一个对象,这个对象哪来的呢?
答:它是制造出来的
思考:怎么制造的?
答:先构思图纸,再生产
在⾯向对象编程过程中,有两个重要组成部分:类 和 对象。
类和对象的关系:⽤类去创建⼀个对象。
1.理解类和对象
类
类是对⼀系列具有相同**特征**和**⾏为**的事物的统称,是⼀个**抽象的概念**,不是真实存在的事物
- 特征即是属性
- ⾏为即是⽅法
类⽐如是制造手机时要⽤到的图纸,也就是说**类是⽤来创建对象**的
对象
对象是类创建出来的真实存在的事物,例如:手机。
>注意:开发中,先有类,再有对象。
⾯向对象实现⽅法
class 类名(): 代码 pass
注意:类名要满⾜标识符命名规则,同时遵循驼峰命名习惯
class My_Project(): print("我是第一个类")
2.创建对象
语法:变量名 = 类名()
class My_Phone(): def call_tel(self): print("正在打电话") def play_game(self): print("正在打游戏")# 创建对象 apple = My_Phone() print(apple) # 调用对象的实例方法 apple.play_game()
创建对象的过程也叫实例化对象.
3.添加和获取对象属性
- 属性即是特征,⽐如:手机的颜色,大小,重量...
- 对象属性既可以在类外⾯添加和获取,也能在类⾥⾯添加和获取。
self:
self
是 Python 中的一个特殊参数,用于引用对象本身。在类的方法中,第一个参数通常都是 self
,用来指代调用该方法的对象本身。
当你调用类的方法时,Python 会自动将调用该方法的对象传递给 self
参数。这样,在方法内部就可以通过 self
来访问对象的属性和其他方法。
- self代表类的实例
- 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的**第一个参数名称**, 按照惯例它的名称是 self。
类外⾯添加对象属性
语法:对象名.属性名 = 值
class My_Phone(): def main(self): pass apple = My_Phone() apple.width = 10 apple.heigth = 15 print(apple.width) print(apple.heigth)
类里面获取对象属性
语法:self.属性名
class My_Phone(): def main(self): print(self.width) print(self.heigth) apple = My_Phone() apple.width = 10 apple.heigth = 15 apple.main()
4.魔术方法( __ __xx____())
在Python中,__ __xx____() 的函数叫做魔法⽅法,指的是具有特殊功能的函数。
______init______()
______init______() :初始化对象
比如:手机的尺寸大小生来就有,那么能不能在生产之前就赋予属性呢?
class My_Phone(): def __init__(self): self.width = 10 self.heigth = 15 def main(self): print(self.width) print(self.heigth) apple = My_Phone()
______init______() ⽅法,在创建⼀个对象时默认被调⽤,不需要⼿动调⽤ ________init________(self) 中的self参数,不需要开发者传递,python解释器会⾃动把当前的对象引⽤传递过去。
5.带参数的init
⼀个类可以创建多个对象,如何对不同的对象设置不同的初始化属性呢? 传参即可
class My_Phone(): def __init__(self,width,heigth): self.width = width self.heigth = heigth def apple_phont(self): print("苹果手机的宽为:",self.width) print("苹果手机的高为:",self.heigth) def huawei_phont(self): print("华为手机的宽为:",self.width) print("华为手机的高为:",self.heigth) apple = My_Phone(10,20) apple.apple_phont()
6.______str______()
当使⽤print输出对象的时候,默认打印对象的内存地址。如果类定义了 __str__ ⽅法,那么就会打印从在这个⽅法中 return 的数据。
class Demo(): def __init__(self, width, heigth): self.width = width self.heigth = heigth def __str__(self): return f"你这个手机的宽是{self.width},高度是{self.heigth}" a = Demo(10,20) print(a)>> 你这个手机的宽是10,高度是20
7.类属性与方法
类的私有属性 __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.逻辑分析
需求涉及⼀个事物: 地⽠,故案例涉及⼀个类:地⽠类 * **地⽠的属性** --- 被烤的时间 --- 地⽠的状态 --- 添加的调料 * **地⽠的⽅法** **被烤** --- ⽤户根据意愿设定每次烤地⽠的时间 --- 判断地⽠被烤的总时间是在哪个区间,修改地⽠状态 **添加调料** --- ⽤户根据意愿设定添加的调料 --- 将⽤户添加的调料存储 * **显示对象信息** ### 需求 1、被烤的时间和对应的地⽠状态: 0 - 5分钟 : ⽣的 5 - 10分钟 : 半⽣不熟 10-12分钟 : 烤熟了 超过12分钟: 烤糊了 2、添加调料:
2.代码实现
标签:__,12,apple,python,self,---,面向对象,print,def From: https://blog.csdn.net/weixin_66370632/article/details/137073622class Test_Potato(): def __init__(self): # 初始化属性:考的时间 self.cook_time = 0 # 初始化属性:考的状态 self.cook_sratic = "生的" # 初始化属性:放的调料 self.cook_seasoning = [] def cook(self, time): # 烤地瓜的时间,并根据时间修改地瓜的状态 self.cook_time += time if 0 <= self.cook_time < 5: self.cook_sratic = "生的" if 5 <= self.cook_time < 10: self.cook_sratic = "半生半熟" if 10 <= self.cook_time <= 12: self.cook_sratic = "熟了" if self.cook_time > 12: self.cook_sratic = "烤糊了" def add_seasoning(self,*seasoning): # 添加调料 self.cook_seasoning.append(seasoning) def __str__(self): # 返回地瓜的状态、考烤时间和添加的调料 return f"当前地瓜烤了--{self.cook_time}--分钟,他的状态是--{self.cook_sratic}--,添加的调料是--{self.cook_seasoning}" if __name__ == '__main__': main = Test_Potato() main.cook(11) # 地瓜烤了11分钟 main.add_seasoning("辣椒","花生","孜然") # 添加辣椒、花生、孜然调料 print(main) # 打印地瓜的状态、烤的时间和添加的调料