如何系统得自学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)  # 打印地瓜的状态、烤的时间和添加的调料
相关推荐
Re.不晚16 分钟前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
老秦包你会18 分钟前
Qt第三课 ----------容器类控件
开发语言·qt
凤枭香21 分钟前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv
ULTRA??25 分钟前
C加加中的结构化绑定(解包,折叠展开)
开发语言·c++
测试杂货铺28 分钟前
外包干了2年,快要废了。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
艾派森32 分钟前
大数据分析案例-基于随机森林算法的智能手机价格预测模型
人工智能·python·随机森林·机器学习·数据挖掘
远望清一色41 分钟前
基于MATLAB的实现垃圾分类Matlab源码
开发语言·matlab
confiself1 小时前
大模型系列——LLAMA-O1 复刻代码解读
java·开发语言
小码的头发丝、1 小时前
Django中ListView 和 DetailView类的区别
数据库·python·django
XiaoLeisj1 小时前
【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期
java·开发语言·java-ee