day14学习总结

day14学习总结

1. 编程思维
  • 编程思想 - 程序员在遇到问题解决问题的思维模式
    1. 面向过程编程 - 基本语法,逻辑
    2. 函数式编程 - 掌握函数 (遇到问题先想有没有一个已经存在的函数具备解决这个问题的能力,如果有直接调用,没有就创建一个这样的函数)
    3. 面向对象编程 - 类,对象(变量函数)
2. 类
  • 什么是类:就是拥有相同功能和相同属性的对象的集合 - 抽象的概念(类就是类型,类别)

  • 对象就是类的实例(类具体的表现),比如说人是类,具体的一个(多个)人就是它的对象。list是类,具体的某一个列表是list的对象

  • (定义类)创建类 - 用代码描述清楚这个类是拥有哪些相同功能(功能 - 函数)和哪些相同属性(属性 - 保存数据的变量)的对象的集合

  • 语法:

    # 语法:
    class 类名:
            类的说明文档
            类的内容
    # 说明
    class   -  关键字,固定写法
    类名   -   程序员自己命名(规范,采用驼峰式命名并且首字母大写(类名大写开头,驼峰式指的是从第二个单词开始首字母大写))
    类的说明文档    -   多行注释
    类的内容   -   相同功能和相同属性
            由方法(对象方法,类方法,静态方法)和属性(对象属性,类属性)组成
                    方法   -  定义在类中的函数
                    属性   -   定义在类中的变量
    
    • 举例:

      class Person:
          '''人类'''
          num = 64  # num是属性
          def eat(self):  # 吃是方法
              print("吃")
          def sleep(self):  # 睡是方法
              print("睡")
      
3. 类中的方法
  • 方法 - 定义在类中的函数,用来描述具备的功能

  • 对象方法:

    • 怎么定义:将函数直接定义在类中
    • 怎么调用:通过对象来调用 - 对象.xxx
    • 特点:自带参数self,通过调用对象方法的参数是self不需要传参,系统自动将当前对象传给self
    • 创建类的对象的时候需不需要传参,需要几个参数,由类中__init__方法决定
    • 什么时候用:如果实现函数的功能需要用到对象属性就是用对象方法
    class A:
        def func1(self):
            print("对象方法")
    
    a = A()
    a.func1()  # 通过对象调用对象方法
    
  • 类方法:

    • 怎么定义:定义函数前加装饰器“@classmethod”

    • 怎么调用:通过类来调用 - 类.xxx

    • 特点:自带参数cls,调用的时候不需要传参,系统自动将当前类传给cls

    • 什么时候用:如果实现函数的功能不需要对象属性需要类就使用类方法

      class B:
          @classmethod
          def func2(cls):
              print("类方法")
      
      B.func2()
      
  • 静态方法:

    • 怎么定义:定义函数前加装饰器“@staticmethod”

    • 怎么调用:通过类来调用 - 类.xxx

    • 什么时候用:实现函数的功能既不需要对象也不需要类就使用静态方法

      class C:
          @staticmethod
          def func3():
              print("静态方法")
      
      C.func3()
      
4. 初始化方法
  • 魔方方法:方法名以__开头并且以__结尾的自带的方法,所有的魔法方法多会在特定的情况下被自动调用

  • 常用的魔方方法:

    • __init__方法:

      创建类的对象的时候会自动调用类中的__init__方法,在内中添加__init__方法的时候,除了方法名和方法类型不能动,可以随意添加参数和随意添加函数体

      class B:
          def __init__(self):
              print("a")
      b1 = B()
      b2 = B()  #自动调用
      
      class C:
          # 在类中添加__init__方法的时候,除了方法名和方法类型不能动,可以随意添
          def __init__(self,x,y):
              print("C的init方法",x,y)
      # 创建类的对象的时候需不需要传参,需要几个参数,由类中__init__方法决定
      c1 = C(2,3)
      
    • __repr__方法:
      打印对象的时候会自动调用对象对应的类中的__repr__方法,来定制打印规则(函数的返回值是什么,对象的打印结果就是什么)返回值必须是字符串

5. 属性
  • 属性:分为对象属性和类属性两种

    • 类属性

      怎么创建:在类中直接定义一个变量。

      怎么使用:通过类来使用 - 类.xxx。

      什么时候用:当属性值不会因为对象不同而不一样的时候就使用类属性。

    • 对象属性

      怎么创建 - 以"self.属性名 = 值"的形式定义在类__init__方法。
      怎么使用 - 通过对象来使用 对象.属性名。
      什么时候用 :当属性值会因为对象不同而不一样的时候就使用对象属性。

      class A:
          x = 100  # x是类属性
      
          def __init__(self):
              self.name = "小明"
              self.num = 10
      
      print(A.x)  # 使用类属性
      A.x = 200
      print(A.x)  # 修改类属性值
      
      a = A()
      print(a.name,a.num) # 使用对象属性
      
      a.name = "小红"
      a.num = 11
      print(a.name,a.num) # 修改对象属性
      
  • 对象属性赋初始值的方式:

    1. 赋固定的值(很好用)

    2. 使用没有默认值的参数来赋值

    3. 使用有默认值的参数来赋值

    4. 举例1:

      class Person:
          def __init__(self,name,gender = "男"):  #gender赋固定的值
              self.name = name
              self.age = 0
              self.gender = gender
          def __repr__(self):
              # return str(self.__dict__)
              return f"<{str(self.__dict__)[1:-1]}>"  # 定制了一个打印规则
      a = Person("小明")
      print(a)
      
    5. 举例2:

      # 创建一个矩形类(根据生活扩展类的内容
      class Rectangle:
          def __init__(self,length,width):
              self.l = length
              self.w = width
          def get_Perimeter(self):
              return (self.l + self.w) *2
          def get_area(self):
              return self.l * self.w
          def __repr__(self):
              return f"长度:{self.l},宽度:{self.w},面积:{self.get_area()},周长:{self.get_Perimeter()}"
      
      a1 = Rectangle(5,8)
      print(a1)
      
  • 属性的增删改查

    • 在面向对象编程的时候,可以直接使用对象来代替字典

    • 查操作:获取属性值

      1. 对象.属性 - 获取指定属性的值

      2. getattr(对象,属性名) - 获取指定属性的值

      3. getattr(对象,属性名,默认值) - 获取指定属性的值,属性不存在直接返回默认值

    • 增,改

      • 对象.属性 = 值 - 当属性存在的时候修改指定属性对应的值;当属性不存在的话就给对象添加属性
      • setattr(对象,属性名,值) - 当属性存在的时候修改指定属性对应的值;当属性不存在的话就给对象添加属性
    • 删除

      • del 对象.属性名 - 删除指定属性的值
      • delattr(对象,属性名) - 删除指定属性的值
    • hasattr:判断属性是否存在

      • 语法:hasattr(对象,属性名)
      class Students:
          def __init__(self,name,age = 18 ,score = 0):
              self.name = name
              self.age = age
              self.score = score
          def __repr__(self):
              return str(self.__dict__)
      
      # 查操作:获取属性值
      stu1 = Students("小明",20,76)
      stu2 = Students("小红",64)
      print(stu1,stu2)
      print(stu1.name) # 对象.属性   -  获取指定属性的值
      print(getattr(stu1,"age"))  # getattr(对象,属性名)  -  获取指定属性的值
      print(getattr(stu2,"gender","女"))
      
      # 增,改
      stu1.name = "小华"
      print(stu1)
      stu2.id = "001"
      print(stu2)
      
      setattr(stu1,"id","002")
      setattr(stu2,"id","003")
      print(stu1)
      print(stu2)
      
      # 删除
      del stu1.score
      print(stu1)
      delattr(stu2,"score")
      print(stu2)
      
      
      '''
      hasattr:判断属性是否存在
          hasattr(对象,属性名)
      '''
      print(hasattr(stu2,"name"))
      print(hasattr(stu1,"score"))
      
6. 继承
  • 继承: - 让子类直接拥有父类的属性和方法

    • 父类就是一个大的类,子类是这个大的类下面的一个小的分类
  • 语法:

    class 类名(父类)
            类的说明文档    
            类的内容
    注意:定义类的时候如果没有写父类,这个类默认继承object(基类)
    
  • 子类添加内容:子类在拥有父类的属性和方法的同时,往往需要由属于自己特有的一些属性和方法

    • 添加类属性和方法:直接在子类中定义新的类属性和新的方法
    • 添加对象属性:super().__init__() - 调用当前类的父类的__init__()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值