美文网首页
面向对象(五)

面向对象(五)

作者: qianranow | 来源:发表于2018-05-13 13:11 被阅读85次

0. 方法和函数


  • 区别
    1. 概念
       (1) 方法:描述一个目标的 行为动作
       (2) 函数:一段具有 特定功能 的代码块
    
    2. 调用方式
       (1) 方法:通过对象来调用
       (2) 函数:通过函数名来调用
    
    3. 数据共享
       (1) 方法之间可以共享数据
       (2) 函数都是独立的个体, 函数之间几乎没有共享的数据
    
  • 相同点
    1. 都封装了一系列行为动作
    2. 都可以被调用之后,执行一系列行为动作
    
  • 判定依据:是否存在 归属对象

1. 实例方法


  • 概念:默认 第一个参数 需要接收到一个 实例对象
    1. 语法:
       class 类名:
           def 实例方法名(self):
               代码
    2. 调用
       (1) 使用实例对象调用, 不用手动传入第一个参数, 解释器会自动把调用实例对象本身传递过去
           class Person:
               def play(self, ball):
                   print("在打球", self, ball)
           p = Person()
           print(p)
           p.play("篮球")
    
       (2) 使用类对象调用, 本质就是直接找到函数本身来调用, 一般不使用
           class Person:
               def play(self, ball):
                   print("在打球", self, ball)
           # 找到函数实现地址,直接调用
           Person.play("luck", "you") 
    
       (3) 间接调用, 本质就是直接找到函数本身来调用, 一般不使用
           class Person:
               def play(self, ball):
                   print("在打球", self, ball)
           # 找到函数实现地址
           func = Person.play
           # 调用
           func("luck", "you")
    
    3. 注意
       (1) 实例方法第一个形参名称可以不是 self , 但是默认会用 self
           class Person:
               def play(name, ball):
                   print("在打球", name, ball)
           p = Person()
           print(p)
           p.play("篮球")
        
       (2) 如果实例方法没有接收任何参数, 则会报错
           class Person:
               def play():
                   print("在打球")
           p = Person()
           p.play()
    
  • 底层简述 底层简述.png

2. 类方法


  • 概念:默认 第一个参数 需要接收到一个 类对象
    1. 语法
       class 类名:
           @classmethod
           def 类方法名(cls, score):
               代码
    
    2. 调用
       (1) 使用类对象调用, 不用手动传入第一个参数, 解释器会自动把调用类对象本身传递过去
           class Person:
               @classmethod
               def run(cls, score):
                   print("在跑步", cls, score)
           print(Person)
           Person.run(100)
      
       (2) 使用实例对象调用, 不用手动传入第一个参数, 解释器会自动把调用实例对象对应的类对象
           给传递过去, 一般不使用
           class Person:
               @classmethod
               def run(cls, score):
                   print("在跑步", cls, score)
           p = Person()
           print(p.__class__)
           p.run(150)
    
       (3) 间接调用, 本质就是直接找到函数本身来调用, 一般不使用
           class Person:
               @classmethod
               def run(cls, score):
                   print("在跑步", cls, score)
           func = Person.run
           print(Person)
           func(300)
    
    3. 注意
       (1) 类方法第一个形参名称可以不是 cls , 但是默认会用 cls
           class Person:
               @classmethod
               def run(name, score):
                   print("在跑步", name, score)
           print(Person)
           Person.run(500)
    
       (2) 如果类方法没有接收任何参数, 则会报错
           class Person:
               @classmethod
               def run():
                   print("在跑步")          
           print(Person)
           Person.run()
    
  • 底层简述 底层简述.png

3. 静态方法


  • 概念:如果有 第一个参数, 不会默认接收 任何对象
    1. 语法
       class 类名:
           @staticmethod
           def 静态方法名():
               代码
    
    2. 调用
       (1) 使用实例对象调用
           class Person:
               @staticmethod
               def fly(height):
                   print("飞起来了", height)
           p = Person()
           p.fly(100)
    
       (2) 使用类对象调用
           class Person:
               @staticmethod
               def fly(height):
                   print("飞起来了", height)
           Person.fly(150)
    
       (3) 间接调用, 本质就是直接找到函数本身来调用, 一般不使用
           class Person:
               @staticmethod
               def fly(height):
                   print("飞起来了", height)
           func = Person.fly
           func(300)
    
  • 底层简述 底层简述.png

4. 方法存储


  • 概念:实例方法类方法静态方法 都存储在 类对象__dict__ 属性中
    class Person:
        def play(self, ball):
            print("在打球", self, ball)
        @classmethod
        def run(cls, score):
            print("在跑步", cls, score)
        @staticmethod
        def fly(height):
            print("飞起来了", height)
    print(Person.__dict__)
    
  • 底层简述 底层简述.png

5. 属性访问


  • 实例方法
    1. 可以访问对象属性
    2. 可以访问类属性
       class Person:
           age = 18
           def play(self):
               print(self.age)
               print(self.num)
       p = Person()
       p.num = 10
       p.play()
    
  • 类方法
    1. 可以访问类属性
       class Person:
           age = 18
           @classmethod
           def run(cls):
               print(cls.age)
       Person.run()
    
  • 静态方法
    1. 可以访问类属性
       class Person:
           age = 18
           @staticmethod
           def fly():
               print(Person.age)
       Person.fly()
    

相关文章

  • Java 工程师成神之路 | 2019正式版

    摘要:什么是面向对象 基础篇 01面向对象 → 什么是面向对象 面向对象、面向过程 面向对象的三大基本特征和五大基...

  • 第七篇 面向对象编程

    一、复习 二、time模块的补充 三、面向对象 四、初始面向对象和类 五、面向对象之间的交互 六、面向对象的组合 ...

  • 阿里P8资深架构师耗时一年整理19年Java工程师成神之路

    1、基础篇 01:面向对象 → 什么是面向对象 面向对象、面向过程 面向对象的三大基本特征和五大基本原则 → 平台...

  • Java 工程师成神之路 | 2019正式版

    一.基础篇 01 面向对象 → 什么是面向对象 面向对象、面向过程 面向对象的三大基本特征和五大基本原则 → 平台...

  • JavaScript之面向对象编程

    五、面向对象编程 目录:面向对象原型继承、面向对象class继承(ES6引入的) 1.面向对象原型继承 类:模板 ...

  • js面向对象

    js面向对象(第五周) 什么是面向对象 面向对象是一种编程思想,是在面向过程编程(结构化编程)之后出现的,面向对象...

  • Java 工程师成神之路

    一、基础篇 01.面向对象 → 什么是面向对象 面向对象、面向过程 面向对象的三大基本特征和五大基本原则 → 平台...

  • Java 工程师成神之路 | 2019正式版

    1 基础篇 01面向对象 → 什么是面向对象面向对象、面向过程 面向对象的三大基本特征和五大基本原则 → 平台无关...

  • Java从入门到入坑(基础篇)

    01:面向对象 1:什么是面向对象 面向对象,面向过程 面向对象的三大基本特征和五大基本原则 三大特性:封装,继承...

  • 面向对象编程

    面向对象编程 一、面向对象和面向过程 二、类和对象 三、内存图 四、构造方法 五、关键字 六、面向对象的三大特征 ...

网友评论

      本文标题:面向对象(五)

      本文链接:https://www.haomeiwen.com/subject/eqqldftx.html