Python编程进阶——面向对象


1.面向对象

# 万物皆对象
# 封装代码的方法,封装更先进
# 面向对象,从面向过程的基础发展过来的,比面向过程更具有灵活性和扩展性
# 面向过程:面向对象 编程解决问题的一种方式,都是指对同一个问题的不同解决方式

# 把大象装进冰箱:3步
# 1.打开冰箱门
# 2.把大象装进冰箱
# 3.关闭冰箱门

# 学生管理系统面向过程,添加修改删除查询工具独立封装成一个个的函数,最后使用有顺序的去调用不同的函数
# 日常思维去做
# 面向过程思维
# 2.把大象装进冰箱
# 3.关闭冰箱门
# 1,打开冰箱门
# 使用的时候 1.打开冰箱门 2.把大象装进冰箱 3.关闭冰箱门
# 流水线思维 wev自动化公开课 线性代码 实现百度搜索
# 1.打开谷歌浏览器 2.访问百度 3.找到输入框输入搜索内容 4.找到搜索按钮进行点击

# 面向对象: 创建一个对象 把要做的事情交给这个对象去做
# 创建一个对象
# 冰箱对象
# 冰箱有打开门的方法
# 冰箱有装东西的方法(大象,零食,饮料)
# 冰箱有关闭的方法

# 编程解决问题的方案
# 面向对象: 侧重的谁来做
# 面向过程: 一条流水线,从头到尾一套流程有顺序的去解决问题

# 面向对象,面向过程 方式更好:学习的思维 简单代码 不复杂的流程 面向过程做 元素定位 (追踪报错)
# 1.打开谷歌 2.访问登录页 3.找到输入框输入用户,密码点击登录,搜索手机,手机添加到购物车
# 复杂的流程 面向对象的思维去做
# 面向对象pom页面对象
# 登录一个页面对象 登录页 找用户名输入框 找密码输入框 找登录按钮 登录的整个流程 加了个流程 验证码
# 添加到购物车页 找颜色 找数量

# 有几个学生,第一个学生:
# 小李,年龄18岁,性别女 会打游戏,会打羽毛球
# 小明,年龄20岁,性别男,会吃鸡,会打篮球
# 弯弯,年龄60岁,性别女,会做饭,会织毛衣
#面向过程去写
# 定义一个小李,年龄18岁,性别女 会打游戏,会打羽毛球
# 定义一个小明,年龄20岁,性别男,会吃鸡,会打篮球
# 定义一个弯弯,年龄60岁,性别女,会做饭,会织毛衣
# 获得小李的信息
# 调用小李的函数就行
# 小明的函数

# 面向对象去写
# 学生对象
# 学生:名字,年龄,性别 会打游戏 会打羽毛球 会吃鸡 会打篮球 会做饭 会织毛衣
# 创建('小李',18,女)会打游戏 会打羽毛球
# ('弯弯',60,女)会做饭 会织毛衣
# 创建多少个学生 给他多少学生 学生有多少技能多少技能

# 面向对象: 了解到两个名称
# 类:具有共同特征或者相同行为的事物的一个统称
# 鸟类: 特征: 有翅膀,有两只脚,有一双眼睛,心脏为四室,体温为恒温
# 行为:会飞,会吃虫子
# 特征被称为:属性
# 行为称为: 方法

# 类是抽象 不能指具体的事物,就是总的一个模板
# 对象: 具体的某一个东西 具体的楼下阿姨家的鹦鹉,隔壁小王家的麻雀 不同具体的对象

# 定义类
'''
class 类名:
    类属性
    类方法
    def 方法1(self):
        pass

    def 方法2(self):
        pass

类属性: 事物的特征
类方法: 事物具有的行为
类名: 第一个首字母大写Bridge
'''

# 游戏,游戏中有几只猫,都是20kg,颜色都是白色,所以我有几只20斤的白猫,一只白猫会抓老鼠
# 一只白猫会吃鱼,一只白猫会吃鱼又会抓老鼠又会打洞
# 写?面向过程?定义3只猫
# 面向对象: 创建一个模板 也就是类

# 创建每一只猫,体重,颜色,给猫取个名字都自己去改变
# 用init初始化函数 作用 只要创建类对象,就会执行这个init
# def test(参数,参数):
#     变量名=参数
# name是翠花 weight是20 color是黑白灰
class Cat:
    def __new__(cls,*args,**kwargs):
        return object.__new__(cls)

    def __init__(self,name,weight,color):
        #翠花赋值给self.name,所以self.name是翠花.然后self是代表对象本身,所以tom1.name 翠花
        self.name = name
        self.weight = weight
        self.color = color
    def catch(self):
        print(f'{self}{self.color}猫抓老鼠')

    def eat(self):
        print('小白猫爱吃鱼')

    def cave(self):
        print('小白猫会打洞')

    def __str__(self):
        return f'这是一个对象的描述信息:{self.name}{self.color}猫的悲伤故事'

    def __del__(self):
        print(f'{self.name}小猫挂了')

# 白猫类的所有特征
# 类不能够直接使用
# 创建具体的对象 也就是实例化对象 对象名=类() 对象名.方法名 对象名.属性
# tom小白猫

# self 不知道 断点看看 self像是对象地址 self好像是对象
# 创建了一个对象 self就能区分你是哪个对象
tom1 = Cat()
tom1.catch()
# 创建出来一只具体的会抓老鼠的猫
print('-'*50)
tom2 = Cat()
tom2.eat()
# 创建出来一只具体的会吃鱼的猫
print('-'*50)
tom3 = Cat()
tom3.eat()
tom3.catch()
tom3.cave()
# 创建出来一只具体的会吃鱼又会抓老鼠又会打洞的猫

# 这是3只猫 不确定是不是3只猫 监测是不是三只猫? id检测
print(tom1,id(tom1))
print(tom2,id(tom2))
print(tom3,id(tom3))

# 猫都是白色的,能不能搞特殊,有一只猫长着变异 黑白猫
# 改变猫的属性
tom1 = Cat()
tom1.cat_color = '黑白'
tom1.catch()

tom2 = Cat()
tom2.catch()

# tom1就是self
tom1 = Cat('翠花','20','黑白灰')
print('名字为{}的小{}猫的故事'.format(tom1.name,tom1.color))
print(tom1)
# 想要tom1打印出来的是我自己自定义的东西
tom1.catch()

tom2 = Cat('月下','20','月下猫')
print('名字为{}的小{}猫的故事'.format(tom2.name,tom2.color))

# 在项目中什么时候会用到init函数 创建一个对象 用到对象里面的内容 之前我一定要干啥
# 一定要干的事情就写在init里面
# 数据库配置 数据库的链接


2.魔法方法

# 用init初始化函数 作用 只要创建类对象,就会执行这个init
# __str__对象描述方法,只要定义了__str__方法,对象就会打印这个方法中的return
# __del__销毁对象,不管写不写del函数,都会销毁
# __new__创建类的对象

3.作业:

# 题目:去银行存取钱
# 二狗 银行账号123456789 余额500 想要存钱200
# 虚竹 银行账号23456789 余额5 想要取钱100
# 秋水 银行账号3456789 余额5亿 想要存钱1亿

class Bank:
    def __init__(self,username,card_no,balance):
        self.username = username
        self.card_no = card_no
        self.balance = balance

    # 存钱
    def deposit(self,amount):
        print('{}你是来存钱的,存{}'.format(self.username,amount))
        self.balance = self.balance + amount

    # 取钱
    def withdrawal(self,amount):
        print('我是来取钱的,取{}'.format(amount))
        if self.balance >= amount:
            self.balance = self.balance - amount
        else:
            print('想钱想疯了,快走')


    def __str__(self):
        return f'我是{self.username},我的账户{self.card_no},我的余额{self.balance}'

# 原本500,存了200,余额是没有变
ergou = Bank('二狗','123456789','500')
ergou.deposit(200)
print(ergou)
# 原本账号5块钱 想取100块 没门 提示 判断账户余额大于等于取钱余额,让你取,记得把账号里面减掉,让你取,否则想钱想疯了
xuzhu = Bank('虚竹','123456789','5')
xuzhu.withdrawal(100)
print(xuzhu)

# 剩下的逻辑
# 二狗存钱,存了之后账号里面的钱没增加
# 虚竹取钱,取了超过他的余额他还有钱

# 面向对象
# 类和对象 创建类 实例化对象才能使用
# self代表的是自己的
# init函数 del str


# 1.#减肥成长记 类和对象
# 小明 体重 80公斤 160斤
# 1.小明每次跑步 会减肥0.5公斤
# 2.每次吃东西 体重会增加1公斤

# 名字 星辰 寒灯
class Person:
    def __init__(self,name,weight):
        self.name = name
        self.weight = weight


    # 减肥给个次数
    def run(self,num):
        print('%s爱跑步,跑步减肥,减0.5斤'%(self.name,self.weight))
        self.weight = self.weight - 0.5*num


    # 吃东西时 给个次数 不确定
    def eat(self,num):
        print('%s爱吃东西,一吃就胖,一胖就胖1斤'%(self.name,self.weight))
        self.weight=self.weight+1*num


    def __str__(self):
        return "我的名字叫%s,体重%.2f"%(self.name,self.weight)


# 创建对象 对象名=类名()
x = Person('星辰',80)
print(x)

#吃东西 吃的方法 每次吃东西 体重会增加1斤 原来的体重上面要加1斤
x.eat()
print(x)
x.run()
print(x)

#星辰一天吃三顿,3顿都没有运动,10顿
x.eat()
x.eat()
x.eat()
x.eat(3)
print(x)
x.run(3)
print(x)# 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

司小幽

真诚赞赏,手留余香。

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

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

打赏作者

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

抵扣说明:

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

余额充值