zoukankan      html  css  js  c++  java
  • 面向对象基础(一)

    一、面向过程编程和面向对象编程的优缺点

    1.1 面向过程编程

    ​ 面向过程编程的核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么然后干什么.......

    ​ 基于面向过程编程的思想编写程序好比在设计一条流水线,是一种机械式的思维方式。

    • 优点:把复杂的问题流程化、进而简单化
    • 缺点:可扩展性差

    1.2 面向对象编程

    ​ 面向对象编程的核心是对象二字,对象是特征与技能的结合体。

    ​ 基于面向对象编程的思想编写程序,就好比是在创造一个世界,你就是这个世界的上帝,是一种上帝式的思维方式。

    • 优点:可扩展性强
    • 缺点:编程的复杂度高

    二、面向对象编程

    2.1 类与对象

    • 对象:属性和方法的结合体
    • 类:一系列共同的属性和方法得结合体

    现实世界生活中:先有对象再有类;python程序中先有类再有对象

    • 定义类:类名要用驼峰体

      # 关键字class 类名:
      # 例如:
      class Student:
          school = 'oldboy'  # 变量表示共同的属性
          def choose(self):  # 函数表示方法
              print('选课')
      
    • 定义对象:

      调用类即可生成对象,调用类的过程,又称为类的实例化,实例化的结果称为类的对象/实例

      stu1 = Student()  # 定义了类的一个对象stu1,调用类会得到一个返回值,该返回值就是类的一个具体存在的对象/实例
      
      
    • 获取属性和方法

      print(stu1.school)   # oldboy  通过.获取属性
      print(stu1.choose)   # 得到绑定方法的内存地址
      stu1.choose()  # 打印选课  .函数() 获取方法
      
    • 查看类中的属性和函数(方法)

      print(Student.__dict__)  # 得到类中的所有属性和方法
      -----------------------------------------------------------------------------
      {'__module__': '__main__', 'school': 'oldboy', 'choose': <function Student.choose at 0x0000022C607F3D90>, '__dict__': <attribute '__dict__' of 'Student' objects>, '__weakref__': <attribute '__weakref__' of 'Student' objects>, '__doc__': None}
      
    • 类调用属性和方法

      方式一:通过dict获取(复杂,不用)

      print(Student.__dict__['school'])  # oldboy
      

      方式二:类名.属性/函数名

      print(Student.school)  # oldboy
      print(Student.choose)  # 输出函数的内存地址  <function Student.choose at 0x0000027B8AB73D90>
      Student.choose(123)  # 类调用方法,第一个参数必须传
      
    • 对象获取属性和方法

      stu1 = Student()
      print(stu1.__dict__)  # {} 还没有给对象放属性,所以为空
      
    • 对象调用属性和方法

      对象 . 属性/方法,对象调用方法时,第一个参数不用传

      stu1 = Student()
      print(stu1.school)  # 对象调用属性
      stu1.choose()  # 对象调用方法,第一个参数不用传
      
    • 向对象中放属性

      方式一:

      class Student:
          school = 'oldboy'  # 变量表示共同的属性
          def choose(self):  # 函数表示方法
              print('选课')
      stu1 = Student()
      stu1.name = 'zyl'
      print(stu1.name)  # zyl
      

      方式二:通过__init__方法

      class Student:
      	school = 'oldboy'  # 变量表示共同的属性
          def __init__(self,name):
              #在类中定义`__init__`方法,方法内写一些参数
              self.name = name
      	def choose(self):  # 函数表示方法
              print('选课')
      
      stu1 = Student('zyl')  # 必须传一个参数给__init__中的形参name
      #内部帮我们做了一些事:当我在实例化产生对象的时候,会自动调用__init__方法,完成对象的初始化
      print(stu1.name)  # zyl
          
      

      注意

      调用类时发生两件事:

      • 创造一个空对象
      • 自动触发类中__init__功能的执行,将stu1以及调用类括号内的参数一同传入

    2.2 对象属性查找顺序

    先从对象自身的名称空间找,没有就去类中找,类中也没有就报错

    2.3 绑定方法

    绑定方法就是定义在类内部的方法

    如果类来调用:该方法就是一个普通函数,有几个参数就需要传几个参数

    如果对象来调用:它就叫对象的绑定方法,第一个参数不需要传,自动传递,自动把对象传过来,在方法内部就可以修改该对象

    class Student:
        #变量表示属性
        school='oldboy'
        #__init__ 看好名字,不是__int__
        def __init__(x,name):
            x.name=name
        def choose(self):
            print("选课....")
        def study(self):
            print('%s学会了python'%self.name)
    
    stu1=Student('nick')  # 给对象stu1放属性,name是nick
    stu1.study()  # 对象调用绑定方法第一个参数不需要传,自动传递  打印nick学会了python
    stu1=Student('李铁蛋')
    stu1.study()  # 打印 李铁蛋学会了python
    

    2.4 一切皆对象

    python中,字典、列表、字符串...都是对象

    类即类型

    #类实例化产生对象
    ll=list([1,2,3])  #这里list就是一个类,调用就生成一个对象l1
    l2=list([5,7,8])  #调用类list生成一个对象l2
    
    #对象调用对象的绑定方法,修改对象自己
    ll.append(5)  # append就是类list中的绑定方法,对象l1调用绑定方法,第一个参数就自动传递
    print(ll)   # [1, 2, 3, 5]
    
    list.append(ll,9) # 类来调用绑定方法,有几个参数就得传几个
    print(ll)  # [1, 2, 3, 5, 9]
    

    2.5 面向对象实例:人狗大战

    # 定义狗类
    class Dog:
        type_dog = '藏獒'
        def __init__(self,name,attack,hp=100):  # 给对象放属性:姓名,攻击力,血量
            self.name = name
            self.attack = attack
            self.hp = hp
    
        def bite(self,enemy):  # 绑定方法,咬的方法,给定参数,自身和敌人
            enemy.hp -= self.attack
            print(f'''
            狗的品种:{self.type_dog}
            {self.name}咬了{enemy.name}一口
            {enemy.name}掉血:{self.attack}
            {enemy.name}剩余血量:{enemy.hp}
            ''')
    
    # 定义人类
    class Human:
        def __init__(self,name,attack,hp=300):
            self.name = name
            self.attack = attack
            self.hp = hp
    
        def hit(self,enemy):
            enemy.hp -= self.attack
            print(f"""
            {self.name}击打了{enemy.name}一下
            {enemy.name}掉血:{self.attack}
            {enemy.name}剩余血量:{enemy.hp}
            """)
    
    dog1 = Dog('来福',10,200)  # 生成一个狗类的对象来福
    human1 = Human('奥特曼',20,500)  # 生成一个人类对象奥特曼
    dog1.bite(human1)  # 调用dog1绑定方法,
    human1.hit(dog1)  # 调用human1绑定方法
    
  • 相关阅读:
    logstash multiple piplines 配置方式
    filter-mutate过滤插件
    redis主从复制
    redis sentinel(哨兵)
    mongodb replica-set
    Linux入门篇(五)——Shell(一)
    Linux入门篇(四)——Vim的使用与Bash
    Linux入门篇(三)——文件与目录
    Linux入门篇(二)——文件
    Linux入门篇(一)——基本命令
  • 原文地址:https://www.cnblogs.com/zhuangyl23/p/11413645.html
Copyright © 2011-2022 走看看