面向对象基础

面向对象基础

  • 理解什么是面向对象
  • 类和对象的概念
  • 添加和获取对象属性
  • 魔术方法

理解面向对象

如何理解面向对象和面向过程之间的差别呢

例如:小明感到非常饿,想要吃饭

面向过程:出门去超市—买蔬菜–买肉—买米—回家—处理食物—煮饭—盛饭—进食

面向对象:点外卖

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

类和对象

类的定义

类是对一系列具有相同特征和行为的事物的统称,是一个抽象的概念,并不是真实存在的事物

  • 特征即是属性
  • 行为即是方法

通俗来说:如果你需要去打篮球,那么你得需要一双篮球鞋,而篮球鞋就是你打球的时候需要的东西,因此可以说类是用来创建对象的

对象的定义

对象是类创建出来的真实存在的事物。

因此:开发中,应该是先有类,然后再有对象

面向对象的实现方法

语法

# class func(类名)():
# 对应代码
# pass

class func():
    # 代码
    pass

1,创建对象

此过程也叫做实例化对象

代码实现如下

class My_doing():

    def do_work(self):
        print("我正在写作业!")

    def do_exercise(self):
        print("我正在做运动!")


# 创建对象
demo = My_doing()
# 调用对象的实例化方法
demo.do_work()
demo.do_exercise()
# 在此不创建对象直接调用也可输出但一般建议先创建对象,然后在调用
# My_doing.do_work()
# My_doing.do_exercise()

self:是代表类的实例,类的方法与普通函数的一个特别的区别——它们必须有一个额外的第一个参数名称,按照惯例它的名称是self

添加和获取对象的属性

属性就是指例如一个人的身高,体重,长相…

对象属性既可以在类外面添加和获取,也能在类里面添加和获取

1,类外添加对象属性

语法

对象名.属性名 = 值

案例

class body_info():
    def main(self):
        pass


demo = body_info()

# 在类外定义我的身高,体重
demo.height = 185
demo.wight = 150

print("我的身高是:", demo.height)
print("我的体重是:", demo.wight)

2,类里面获取对象属性

语法

self.属性名

案例代码:

class body_info():
    def main(self):
        print("我的身高是:", self.height)
        print("我的体重是:", self.weight)


demo = body_info()

# 定义我的身高,体重
demo.height = 185
demo.weight = 150

demo.main()

魔术方法

在python中,__ xx __()的函数叫作魔术方法,指的是具有特殊功能的函数

1,__ init() __ 函数

__ init __()函数,如:每一部手机都有一个出厂时的就已经自定义好的一些数值,如尺寸

因此,此函数的作用就是初始化对象

案例:

class My_body():
    def __init__(self, color="red"):
        self.height = 30
        self.weight = 16
        self.color = color

    def main(self):
        print(self.height)
        print(self.weight)


demo = My_body()
print(demo.height)
print(demo.weight)
print(demo.color)

__ init() __ 方法,在创建一个对象时默认被调用,不需要手动调用,而且里面的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递过去。

代码结果如下:

在这里插入图片描述

注意看,init函数是可以带参数的

2,__ str() __函数

当python输出对象的时候,默认打印对象的内存地址,如果类定义了str方法,那么就会打印从这个方法中return的数据

解释类的属性或作用

案例如下:

class My_body():
    def __init__(self, height=185, width=140):
        self.height = height
        self.width = width

    def __str__(self):
        return f"你的身高是{self.height},你的体重是{self.width}斤"


demo = My_body()

print(demo)

注意:如果在属性名前加上两个下划线(__),则是声明该属性为私有属性,不能再类的外部被使用或直接访问

下面来看一个综合案列:

综合应用1:烧烤

  • 食物的属性

    — 被烤的时间

    — 被烤的状态

    — 被添加的调料

  • 烤烧烤的方法

    1,根据用户意愿设定每次烤地瓜的时间

    2,判断地瓜被烤的总时间是在哪个区间,修改地瓜状态

  • 添加调料

需求

1,被烤的时间和对应的食物的状态:

​ 0 - 5分钟 : ⽣的

​ 5 - 10分钟 : 半⽣不熟

​ 10-12分钟 : 烤熟了

​ 超过12分钟: 烤糊了

2,添加调料

案例代码实现功能如下:

class Food_roast():
    def __init__(self, ):
        self.roast_time = 0
        self.roast_state = "生的"
        self.roast_seasoning = []

    def Food_acquire(self, time):
        self.roast_time += time

        if 0 < self.roast_time < 5:
            self.roast_state = "生的"
        if 5 < self.roast_time < 10:
            self.roast_state = "半生不熟"
        if 10 < self.roast_time < 12:
            self.roast_state = "烤熟了"
        if self.roast_time > 12:
            self.roast_state = "烤糊了"

    def add_seasoning(self, *seasoning):
        self.roast_seasoning.append(seasoning)

    def __str__(self):
        return f"当前烤的食物考了{self.roast_time}分钟,食物的状态是{self.roast_state},添加的调料有{self.roast_seasoning}"


if __name__ == '__main__':
    demo = Food_roast()
    k = int(input("请输入烧烤的时间:"))
    demo.Food_acquire(k)
    demo.add_seasoning("辣椒", "孜然", "花生酱")
    print(demo)

综合应用2:银行自动存取钱

class Auto_bank():
    def __init__(self):
        self.atm_money = 0
        self.my_money = 100

    def save_money(self):
        num = int(input("请输入存款金额:"))
        if num <= self.my_money:
            self.atm_money += num
            self.my_money -= num
            print(f"存钱成功\n当前银行卡的余额为{self.atm_money},我的余额为{self.my_money}")
        else:
            print(f"您手上并没有这么多玛尼!")

    def get_money(self):
        num = int(input("请输入您的取出金额:"))
        if num > self.atm_money:
            print(f"您的银行卡里没有这么多现金")
        else:
            self.atm_money -= num
            self.my_money += num
            print(f"取钱成功\n当前您手上余额为:{self.my_money},银行卡里余额为:{self.atm_money}")


if __name__ == '__main__':
    while True:
        demo = Auto_bank()
        k = int(input("请输入您的选择{0:存钱 1:取钱 2:退出系统}"))
        if k == 0:
            demo.save_money()
        elif k == 1:
            demo.get_money()
        elif k == 2:
            print("欢迎下次使用!")
            break
        else:
            print("您的输入有误,请重新输入!")

不足之处,欢迎大家进行指正!!!

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大杯奶绿加少冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值