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
    
    千里之行,始于足下。
  • 相关阅读:
    Atitit.播放系统规划新版本 v4 q18 and 最近版本回顾
    Atitit.播放系统规划新版本 v4 q18 and 最近版本回顾
    atitit.极光消息推送服务器端开发实现推送  jpush v3. 总结o7p
    atitit.极光消息推送服务器端开发实现推送  jpush v3. 总结o7p
    Atitit.文件搜索工具 attilax 总结
    Atitit.文件搜索工具 attilax 总结
    Atitit.软件命名空间  包的命名统计 及命名表(2000个名称) 方案java package
    Atitit.软件命名空间  包的命名统计 及命名表(2000个名称) 方案java package
    Atitit..状态机与词法分析  通用分词器 分词引擎的设计与实现 attilax总结
    Atitit..状态机与词法分析  通用分词器 分词引擎的设计与实现 attilax总结
  • 原文地址:https://www.cnblogs.com/jincoco/p/12935845.html
Copyright © 2011-2022 走看看