乐之之

知而行乐,乐而行之,天道酬勤,学无止境。
面向对象

一、理解面向对象

(一)理解面向对象的举例

  为了方便了解,拿面向过程做一个对比

  • 面向过程:去超市--买菜--买肉--买米--回家--洗菜--切肉--炒菜--煮米饭--盛饭--开吃
  • 面向对象:点外卖
  • 总结:面向对象就是将编程当成是一个事物,对外界来说,事物是直接使用的,不用去管他内部情况。而编程就是设置事物能够做什么事情。

(二)类和对象

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

  答:它是制造出来的

  思考:怎么制造的?

  答:先构图纸,再生产

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

  • 类和对象的关系:用类去创建一个对象。

1、类

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

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

  类比如是制造洗衣机时要用到的图纸,也就是说类是用来创建对象的

2、对象

  对象是类创建出来的真实存在的事物,例如:手机。

  注意:开发中,先有类,再有对象。

二、面向对象实现方法

  语法

class 类名():
    代码
    pass

  注意:类名要满足标识符命名规则。同时遵循驼峰命名习惯

  代码体验

class My_Project():
    print("我是第一个类")

My_Project()

(一)创建对象

  语法

# 变量名 = 类名()

  实例

class My_Phone():
    def call_tel(self):
        print("正在打电话")

    def play_game(self):
        print("正在打游戏")

# 创建对象
apple = My_Phone()
print(apple)

# 调用对象的实例方法
apple.play_game()
  • 创建对象的过程也叫实例化对象

(二)self

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

(三)添加和获取对象属性

  • 属性即是特征,比如:手机的颜色,大小,重量...
  • 对象属性即可以在类外面添加和获取,也能在类里面添加和获取。

1、类外面添加对象属性

  语法

对象名,属性名 = 值
class My_Phone():
    def main(self):
        pass

apple = My_Phone()

apple.width = 10
apple.heigth = 15

print(apple.width)
print(apple.heigth)

--------------------------
10
15

2、类里面获取对象属性

class My_Phone():
    def main(self,):
        print(f"手机的宽是{self.width}")
        print(f"手机的高是{self.heigth}")


apple = My_Phone()

apple.width = 10
apple.heigth = 15

apple.main()

--------------------------------
手机的宽是10
手机的高是15

三、魔术方法

  在Python中,__xx__()的函数叫做魔法方法,指的是具有特殊功能的函数。

(一)__init__()

  手机的尺寸大小生来就有,那么能不能在生产之前就赋予属性呢?

  __init__():初始化对象

class My_Phone():
    def __init__(self):
        self.width = 10
        self.heigth = 15

    def demo(self):
        print("手机的宽是",self.width)
        print("手机的高是",self.heigth)

apple = My_Phone()
apple.demo()

--------------------------
手机的宽是 10
手机的高是 15
  • 定义多个方法
class My_Phone():
    def __init__(self,width,heigth):
        self.width = width
        self.heigth = heigth

    def app_phone(self,name):
        print(f"手机是{name},手机的宽是",self.width)
        print(f"手机是{name},手机的高是",self.heigth)
    def huawei_phone(self,name):
        print(f"手机是{name},手机的宽是", self.width)
        print(f"手机是{name},手机的高是", self.heigth)
apple = My_Phone(10,15)
apple.app_phone("苹果")

huawei = My_Phone(20,40)
huawei.huawei_phone("华为")

----------------------------
手机是苹果,手机的宽是 10
手机是苹果,手机的高是 15
手机是华为,手机的宽是 20
手机是华为,手机的高是 40

(二)__str__()

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

  解释类的属性或作用

class My_Phone():
    def __init__(self):
        self.width = 10
        self.heigth = 15

    def __str__(self):
        return (f"手机的宽是{self.width},高度是{self.heigth}")

a = My_Phone()
print(a)

--------------------------
手机的宽是10,高度是15

(三)__del__()

  当删除对象时,Python解释器也会默认调用__del__()方法,在对象销毁的时候被调用,当对象不再被使用时,__del__()方法运行:

class Demo():
    def __init__(self,width,heigth):
        self.width = width
        self.heigth = heigth

    def __del__(self):
        print("对象已经删除")

a = Demo(10,20)

---------------
对象已经删除

四、类属性与方法

  • 类的私有属性

  __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
2
2

五、综合应用-烤地瓜

  需求涉及一个事物:地瓜,故案例涉及一个类:地瓜类

  • 地瓜的属性

  -- 被烤的时间

  -- 地瓜的状态

  -- 添加的调料

  • 地瓜的方法

    被烤

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

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

    添加调料

      -- 用户根据意愿设定添加的调料

      -- 将用户添加的调料存储

  • 显示对象信息

  需求

  1、被烤的时间和对应的地瓜状态:

    0 - 5 分钟:生的

    5 - 10 分钟:半生不熟

    10 - 12 分钟:烤熟了

    超过12分钟:烤糊了

  2、添加调料:

    辣椒,孜然,盐

  • 实例代码
class Kao_Digua():
    def __init__(self):
        self.cook_time = 0
        self.state = "生的"
        self.seasoning = []

    def cook(self,time):
        self.cook_time +=time
        if 0 <= self.cook_time <5:
            self.state = "生的"
        if 5 <= self.cook_time < 10:
            self.state = "半生不熟"

        if 10 <= self.cook_time < 15:
            self.state = "地瓜熟了"
        if self.cook_time>=15:
            self.state = "地瓜糊了"

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

    def __str__(self):
        return (f"当前的地瓜考了--{self.cook_time}--分钟,它的状态是--{self.state}--,添加的调料是--{self.seasoning}--")

a = Kao_Digua()
a.cook(10)
a.add_seasoning("辣椒","孜然","")
print(a)

---------------------------------------------------------------
当前的地瓜考了--10--分钟,它的状态是--地瓜熟了--,添加的调料是--[('辣椒', '孜然', '')]--

 

posted on 2022-10-04 21:39  乐之之  阅读(39)  评论(0编辑  收藏  举报