面向对象,面向对象的3个装饰器

leo3notblv三个不相信 / 2023-05-13 / 原文


  • 通过函数实现面向对象编程
  • 面向对象的思维内涵
    • 只关心程序中有多少角色
    • 每个角色有什么方法,有什么属性
    • 所有角色都是由一个模板创建的
    • 所有属性和技能都待在自己的角色模板中--------可读性好
    • 能够更加方便得为角色添加技能或属性----------可扩展性好
    • 面向对象有个非常重要的关健侧--抽象
  • class 类名:
    • 类名一般首字母要求大写
    • 类内定义的变量为类的属性,查看类的属性如Car.color
      • 类属性和实例属性的区别
        • 概念,类属性是类的属性,实例属性是对象属性
        • 使用,类属性可以通过类也可以通过实例调用,实例属性只能实例调
    • 变量=类名(),变量实例化成对象
    • __init__(self, , , )初始化方法
      • 在实例化的同时就会调用,实例化的同时会开辟一块内存
      • __new__创造空间给对象,然后__init__初始化
      • 不需要写返回值,默认return None不能改
    • 通过对象.方法()调用 = 类.方法(对象),但是推荐用对象调用
    • __main__指当前文件
    • 函数名一般小写字母开头
  • 对象名
    • 对象.属性 查看对象属性
    • 对象.方法名 调方法
  • 静态变量
    • 类变量,类的属性
    • 操作静态变量时,如果是查看,用类和对象都可以
    • 如果是修改,尽量使用类名修改,这样不会出错
    • 用对象修改静态变量只要用到了赋值,相当于在自己的对象空间内新建属性,并不能修改类空间的内容
  • 组合
    • 对象可以作为另一个类的属性
  • 什么是面向对象
    • 一切皆对象
    • 内置的类
      • str int bool list dict tuple set
      • 内置的类不需要定义可以直接调用
  • 面向对象三大特性----类的三大特性
    • 封装
      • 广义上的封装
        • 把方法和变量都封装在类中
        • 在类的外部不能直接调用
      • 狭义上的封装
        • 私有化方法和属性
          • 在类的内部,实例变量(对象属性)可以变成私有的,类的变量可以变成私有的,实例的方法可以变成私有的,一旦变成私有的就只能在类的内部使用
          • 不能在类的外部使用
          • 不能继承
          • 1.隐藏数据 (itprojects.cn)私有属性
          • 私有方法2.隐藏功能 (itprojects.cn)
          • 静态方法11.静态方法 (itprojects.cn)
    • 继承
    • 多态
      • 通过继承来实现
      • python中处处是多态
      • 多态的好处
        • 定义一个函数func( a )传入一个对象a
        • 在函数内调用对象的某个方法a.fun(),返回结果
        • 由于多态性质,传入对象不同,函数func的运算过程和返回结果不同
        • 思考了一下,反射结合多态应该很实用,定义一个数据类,增删改查四个子类继承数据类,传入一条SQL,判断类型,然后实例化对应的类,反射写入SQL到对象属性,这时定义一个调用数据库的方法,传入的对象不同,就可以做增删改查
  • 面向对象的三个装饰器
    • '@property'
      • 将一个方法伪装成属性,调用时就不用加括号了
    • '@staticmethod'
      • 声明类的方法是静态方法,不用传任何默认参数,不实例化,类名/对象+方法名可以直接调用
      • 与类和对象没什么直接关系的方法,不获取类也不获取 对象,可以改写到类外面用普通函数
      • 便于管理组织代码
    • '@classmethod'
      • 装饰当前的方法为类方法,默认参数cls,cls指的就是当前类
      • 用cls表示当前类的内存地址
      • 在方法中像获取实例相关的数据,比如获取实例本身,或者实例的属性,或者调用其他实例方法,用实例方法
      • 在方法中获取类相关的数据,比如类属性,类本身,其他的类方法
  • 类直接调用实例方法的问题
    • Python类调用实例方法 (biancheng.net)
  •