如何系统得自学python?(基础知识篇完)——12.面向对象

一、面向对象

复制代码
为了方便了解,我们拿面向过程做一个对比
复制代码
例如:肚子饿了,想吃饭

面向过程:去超市---买菜---卖肉---买米---回家---洗菜---切肉---炒菜---煮米饭---盛饭---开吃

面向对象:点外卖

总结:⾯向对象就是将编程当成是⼀个事物,对外界来说,事物是直接使⽤的,不⽤去管他内部的情况。⽽编程就是设置事物能够做什么事。

二、类和对象

思考:打电话需要用手机,这个手机就是一个对象,这个对象哪来的呢?

答:它是制造出来的

思考:怎么制造的?

答:先构思图纸,再生产

在⾯向对象编程过程中,有两个重要组成部分:类 和 对象。

类和对象的关系:⽤类去创建⼀个对象。

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.代码实现

复制代码
class 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)  # 打印地瓜的状态、烤的时间和添加的调料
相关推荐
Darenm11132 分钟前
JavaScript事件流:冒泡与捕获的深度解析
开发语言·前端·javascript
whltaoin36 分钟前
Java 后端与 AI 融合:技术路径、实战案例与未来趋势
java·开发语言·人工智能·编程思想·ai生态
Hy行者勇哥41 分钟前
数据中台的数据源与数据处理流程
大数据·前端·人工智能·学习·个人开发
fat house cat_42 分钟前
记一次网络io学习流水账
网络·学习
wjs202444 分钟前
jEasyUI 自定义窗口工具栏
开发语言
二十雨辰1 小时前
vite与ts的结合
开发语言·前端·vue.js
xiaohanbao091 小时前
Transformer架构与NLP词表示演进
python·深度学习·神经网络
亦良Cool1 小时前
如何部署一个Java项目
java·开发语言
沐知全栈开发1 小时前
JavaScript 输出
开发语言
love530love2 小时前
【笔记】 Podman Desktop 中部署 Stable Diffusion WebUI (GPU 支持)
人工智能·windows·笔记·python·容器·stable diffusion·podman