亿豪的python学习 day10

今天的学习内容

面向对象 Object Oriented

概述

面向过程

  1. 分析出解决问题的步骤,然后逐步实现。
    例如:婚礼筹办
    – 发请柬(选照片、措词、制作)
    – 宴席(场地、找厨师、准备桌椅餐具、计划菜品、购买食材)
    – 婚礼仪式(定婚礼仪式流程、请主持人)
  2. 公式:程序 = 算法 + 数据结构
  3. 优点:所有环节、细节自己掌控。
  4. 缺点:考虑所有细节,工作量大。
    面向对象
  5. 找出解决问题的人,然后分配职责。
    例如:婚礼筹办
    – 发请柬:找摄影公司(拍照片、制作请柬)
    – 宴席:找酒店(告诉对方标准、数量、挑选菜品)
    – 婚礼仪式:找婚庆公司(对方提供司仪、制定流程、提供设备、帮助执行)
  6. 公式:程序 = 对象 + 交互
  7. 优点
    (1) 思想层面:
    – 可模拟现实情景,更接近于人类思维。
    – 有利于梳理归纳、分析解决问题。
    (2) 技术层面:
    – 高复用:对重复的代码进行封装,提高开发效率。
    – 高扩展:增加新的功能,不修改以前的代码。
    – 高维护:代码可读性好,逻辑清晰,结构规整。
  8. 缺点:学习曲线陡峭。

类和对象

  1. 类:一个抽象的概念,即生活中的”类别”。

  2. 对象:类的具体实例,即归属于某个类别的”个体”。

  3. 类是创建对象的”模板”。
    – 数据成员:名词类型的状态。
    – 方法成员:动词类型的行为。

  4. 类与类行为不同,对象与对象数据不同。
    语法
    定义类

  5. 代码
    class 类名:
    “””文档说明”””
    def init(self,参数列表):
    self.实例变量 = 参数
    方法成员

  6. 说明
    – 类名所有单词首字母大写.
    init 也叫构造函数,创建对象时被调用,也可以省略。
    – self 变量绑定的是被创建的对象,名称可以随意。
    创建对象(实例化)
    变量 = 构造函数 (参数列表)

实例成员

实例变量
  1. 语法
    (1) 定义:对象.变量名
    (2) 调用:对象.变量名

    1. 说明
      (1) 首次通过对象赋值为创建,再次赋值为修改.
      w01 = Wife()
      w01.name = “丽丽”
      w01.name = “莉莉”
      (2) 通常在构造函数(init)中创建。
      w01 = Wife(“丽丽”,24)
      print(w01.name)
      (3) 每个对象存储一份,通过对象地址访问。

    2. 作用:描述某个对象的数据。

    3. dict:对象的属性,用于存储自身实例变量的字典。

实例方法
  1. 语法
    (1) 定义: def 方法名称(self, 参数列表):
    方法体
    (2) 调用: 对象地址.实例方法名(参数列表)
    不建议通过类名访问实例方法
  2. 说明
    (1) 至少有一个形参,第一个参数绑定调用这个方法的对象,一般命名为"self"。
    (2) 无论创建多少对象,方法只有一份,并且被所有对象共享。
  3. 作用:表示对象行为。

类成员

类变量
  1. 语法
    (1) 定义:在类中,方法外定义变量。
    class 类名:
    变量名 = 表达式
    (2) 调用:类名.变量名
    不建议通过对象访问类变量
  2. 说明
    (1) 存储在类中。
    (2) 只有一份,被所有对象共享。
  3. 作用:描述所有对象的共有数据。
类方法
  1. 语法
    (1) 定义:
    @classmethod
    def 方法名称(cls,参数列表):
    方法体
    调用:类名.方法名(参数列表)
    不建议通过对象访问类方法
  2. 说明
    (1) 至少有一个形参,第一个形参用于绑定类,一般命名为’cls’
    (2) 使用@classmethod修饰的目的是调用类方法时可以隐式传递类。
    (3) 类方法中不能访问实例成员,实例方法中可以访问类成员。
  3. 作用:操作类变量。

注:以上为课本学习内容,接下来是重点

抽象: 个体 --> 类别
对象 类
具体 抽象
qtx 人
注:正如路边那棵松树,是一个实际存在的,拥有具体属性的一个对象,而松树这个词,属于一种抽象的概念。

设计:先有对象,再先有类.
编码:先有类,再先有对象.
注:编程中需要先定义类拥有的属性和方法,才能创建对象,即类的实例

class Wife:
    """
        创建老婆类,抽象的概念
    """
    # 1. 数据 -- 变量
    def __init__(self, name, height, weight):
        self.name = name
        self.height = height
        self.weight = weight

    # 2. 行为 -- 方法(函数)
    def play(self):
        print(self.name, "在玩耍")

# 创建对象:类名(参数)
#         构造函数(参数) -->  __init__
w01 = Wife("铁锤",150,150)
w01.play()# 自动传递w01进入方法
#“铁锤在玩耍”

注:创造一个实例化对象w01,并调用老婆类中的play方法,进而在终端输出“老婆在玩耍”这一语句。

实例成员

记住一句话:实例成员,使用对象地址访问.
可以通过__dict__操作所有实例变量

内存示意图


注:图片右边为图片左边代码的内存示意图,从该图可以看到,类中代码通过栈幀,将参数的地址赋给了实例化的对象

class ICBC:
    """
        工商银行
    """
    # 类变量
    total_money = 1000000

    # 类方法
    @classmethod
    def print_total_money(cls):
        # print("总行的钱:",ICBC.total_money)
        print("总行的钱:",cls.total_money)
    def __init__(self,name,money):
        self.name = name
        # 实例变量
        self.money = money
        # 总行的钱减少
        ICBC.total_money -= money

i01 = ICBC("天坛支行",100000)
i02 = ICBC("陶然亭支行",100000)
print(ICBC.total_money)
# print(i01.total_money)
ICBC.print_total_money()

在这里插入图片描述
注:类变量保存在代码区,其类方法可以被类名所调用,其值可变且唯一
并且,类变量是类所有实例化对象所共有的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值