zoukankan      html  css  js  c++  java
  • 面向对象编程

    面向对象编程

    面向过程编程

    ​ 面向过程的程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式。

    优点:复杂度的问题流程化,进而简单化(一个复杂的问题,分成一个个小的步骤去实现,实现小的步骤将会非常简单)。
    
    缺点:一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即便是能,也得是大改,改一个组件,牵一发而动全身。
    

    面向对象编程

    ​ 面向对象的程序设计:核心是对象二字,对象是特征与技能的结合体,基于面向对象设计程序就好比在创造一个世界,你就是这个世界的上帝,存在的皆为对象,不存在的也可以创造出来,与面向过程机械式的思维方式形成鲜明对比,面向对象更加注重对现实世界的模拟,是一种“上帝式”的思维方式。

    优点:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。。
    
    缺点:编程的复杂度要高于面向过程。
    

    类与对象

    • 类:种类,分类,类别。
    • 对象:特征与技能的结合体。
    • 定义:类就是一系列对象相似的特征与技能的结合体。

    现实世界中先有对象,后有类。

    世界上肯定是先出现各种各样的实际存在的物体,然后随着人类文明的发展,人类站在不同的角度总结出了不同的种类,如人类、动物类、植物类等概念
    
    也就说,对象是具体的存在,而类仅仅只是一个概念,并不真实存在
    

    Python中先有类,再有对象。

    类的定义与实例化

    '''
    class 类名驼峰体():
        # 定义一系列特征
    	# 定义一系列方法
        
    对象1 = 类名()
    '''
    # 定义一个PlayGame类
    class PlayGame:
    	name = '英雄联盟'
    
    # 操作类的属性
    PlayGame.name = '王者荣耀'
    # 实例化对象
    player = PlayGame()
    # 属性的访问
    print(player.name)
    # 操作对象属性属性, 只是更改了 player 名称空间中的 name 属性
    player.name = '英雄联盟'
    print(player.name)
    

    给对象定制独有的特征

    方式一:
    class PlayGame:
        game = '英雄联盟'
        def choose_hero(self):
            print('is choosing hero')
    
    # 实例化对象:
    hero1 = PlayGame()
    # 为对象定制自己独有的特征
    hero1.name = '无极剑圣'
    
    方式二:
    class PlayGame:
        game = '英雄联盟'
        def __init__(self,name):
            self.name = name
        def choose_hero(self):
            print('is choosing hero')
    
    hero1 = PlayGame('蛮王')
    

    对象的属性查找顺序

    class PlayGame:
        game = '英雄联盟'
        name = 'c'
        def __init__(self,name,hero):
            self.name = name
            self.hero = hero
            
        def choose_hero(self):
            print('is choosing hero')
            
    hero1 = PlayGame('a','剑圣')
    hero1.game
    
    hero2 = PlayGame('b','蛮王')
    hero2.game
    

    类与对象的绑定方法

    什么是绑定方法

    ​ 方法就是函数,面向对象编程中函数就是方法。绑定方法就是对象或类与函数进行绑定。

    ​ 绑定方法有两种,一种是绑定给类的,一种是绑定给对象的。

    为什么要绑定

    ​ 对象本质上就是存放数据的容器,绑定方法就是将函数与数据绑定在一起,这个函数的功能就是处理数据。

    # 类的绑定方法
    class PlayGame:
        game = '英雄联盟'
        
        def __init__(self,name,hero):
            self.name = name
            self.hero = hero
        
        @classmethod # 这就是一个类的绑定方法
        def choose_hero(self):
            print(f'{self.name} is choosing hero')
            
    PlayGame.choose_hero()
    
    # 对象的绑定方法
    class PlayGame:
    	game = '王者荣耀'
        
        def __init__(self, name, hero)
        	self.name = name
            self.hero = hero
        
        def choose_hero(self): # 绑定给对象的方法
            print(f'{self.name} is choosing hero')
            
    player = PlayGame('小明', '众星之子')
    player.choose_hero()
    

    非绑定方法

    ​ python给我提供了 @staticmethod ,可以解除绑定关系,将一个类中的方法变为一个普通的函数

    class PlayGame:
    	name = '英雄联盟'
        
        def __init__(self, name , hero):
    		self.name = name
            self.hero = hero
        
        @classmethod
        def start_game(self):
            print(f'{self.name} start')
            
        def choose_hero(self):
            print(f'{self.name} is choosing hero')
        
        @staticmethod # 非绑定方法
        def test_func(*args, **kwargs):
            print('这是一个非绑定方法')
    
    # 通过类调用非绑定方法
    PlayGame.test_func()
    # 通过对象调用非绑定方法
    player = PlayGame('小红', '无极剑圣')
    player.test_func()
    
    # 结果
    # 这是一个非绑定方法
    # 这是一个非绑定方法
    

    isinstance 与 issubclass

    isinstance:判断一个 obj 是否是某个类 cls 的实例化对象

    class Foo():
        pass
    
    f = Foo()
    
    print(isinstance(f,Foo))
    
    # True
    

    issubclass:判断一个子类是否是一个父类的派生类

    class A():
        pass
    
    class B(A):
        pass
    
    print(issubclass(B,A))
    
    # True
    
    千里之行,始于足下。
  • 相关阅读:
    [Voice communications] 声音的滤波
    [Voice communications] 声道的转换
    [Voice communications] 音量的控制
    [Voice communications] 看得到的音频流
    [Voice communications] 让音乐响起来
    HDFS之FileStatus
    HDFS中JAVA API的使用
    hadoop集群环境的搭建
    【ARM-Linux开发】【CUDA开发】【深度学习与神经网络】Jetson Tx2安装相关之三
    【ARM-Linux开发】【CUDA开发】【深度学习与神经网络】Jetson Tx2安装相关之三
  • 原文地址:https://www.cnblogs.com/jincoco/p/12935845.html
Copyright © 2011-2022 走看看