zoukankan      html  css  js  c++  java
  • 面向对象初识

    一 : 面向对象初识

    1.1 回顾面向过程编程VS函数式编程

    面向过程编程,测量元素的个数
    
    s = "dsdsgffd"
    count = 0
    for i in s:
        count += 1
    print(count)
    
    
    l1 = [1,2,3,4,5]
    count = 0
    for i in l1:
        count += 1
    print(l1)
    
    
    函数编程
    
    def func(s):
        count = 0
        for i in s:
            count += 1
        return count
    # func('dsdsgffd')
    func('[1,2,3,4,5]')
    

    **函数编程较之于面向过程编程最明显的两个特点 : **

    1.减少代码的重用性

    2.增强代码的可读性

    1.2 函数式编程VS面向对象编程

    函数式编程

    # 函数式编程
    
    # auth 认证相关
    def login():
        pass
    
    def regisgter():
        pass
    
    # account 账户相关
    def func1():
        pass
    
    def func2():
        pass
    
    
    # 购物车相关
    def shopping(username,money):
        pass
    def check_paidgoods(username,money):
        pass
    def check_unpaidgoods(username,money):
        pass
    def save(username,money):
        pass
    
    函数式编程
    

    面向对象式编程

    class LoginHandler:
        def login(self):
            pass
    
        def regisgter(self):
            pass
    
    class Account:
        def func1(self):
            pass
    
        def func2(self):
            pass
    
    class ShoppingCar:
        def shopping(username,money):
            pass
        def check_paidgoods(username,money):
            pass
        def check_unpaidgoods(username,money):
            pass
        def save(username,money):
            pass
    
    

    面向对象编程第一个优点 : 是一类相似功能函数的集合,使你的代码更清晰化,更合理化

    第二个优点 : 面向对象,要有上帝视角,类其实是一个公共模板(厂房),对象就是从具体的模板实例化出来(慢慢体会)

    1.3类的结构

    class Human:
        """
        此类主要构建人类
        """
        mind = '有思想'   #  第一部分  静态属性 属性  静态变量  静态字段
        dic = {}
        l1 = []
        def sork(self):   #  第二部分  方法  函数  动态属性
            print('人都会工作')  #  print(self)
    

    class 是关键字与 def 的用法 相同 定义一个类

    Human 是此类的类名,类名推荐使用的是驼峰体,首字母大写.(私有类可以加下划线)

    类的结构从大方向来说分为两部分:

    静态变量

    动态方法

    二 : 从类名的角度研究类

    2.1 类名操作静态属性

    2.11 查看类中的所有内容
    类名.__dict__ 方式
    
    class Human:
        """
        此类主要构建人类
        """
        mind = '有思想'   #  第一部分  静态属性 属性  静态变量  静态字段
        dic = {}
        l1 = []
        def sork(self):   #  第二部分  方法  函数  动态属性
            print('人都会工作')  #  print(self)
    # print(Human.__dict__)   #  查找到所有内容
    # print(Human.__dict__['mind'])  #  有思想   直接查找到
    # Human.__dict__['mind'] = '无脑'
    # print(Human.__dict__)  # 报错   通过这种方式只能查询  不能修改
    #  这种方式一般用来用户查询
    
    2.12 第二种 : 万能的点
    class Human:
        """
        此类主要构建人类
        """
        mind = '有思想'   #  第一部分  静态属性 属性  静态变量  静态字段
        dic = {}
        l1 = []
        def sork(self):   #  第二部分  方法  函数  动态属性
            print('人都会工作')
    #  查
    # print(Human.mind)  #  有思想
    #  改
    # Human.mind = "无脑"
    # print(Human.mind)   #  无脑
    # 删
    del Human.mind
    Human.work = '直立行走'
    print(Human.work)  #   直立行走
    
    
    通过万能的点   可以增删改查类中的单个属性
    

    对以上内容的总结 : 如果想查找类中的所有内容,用第一种方法 dict 的方法,如果只是操作单个属性则用万能的点的方式.

    2.2 类名操作动态属性

    class Human:
        """
        此类主要是构建人类
        """
        mind = '有思想'  # 第一部分:静态属性 属性 静态变量 静态字段
        dic = {}
        l1 = []
        def work(self): # 第二部分:方法 函数 动态属性
            # print(self)
            print('人类会工作')
        def tools(self):
            print('人类会使用工具')
    Human.work(1)        # 人类会工作
    Human.tools(11)      # 人类会使用工具  
    

    三 : 从对象角度研究类

    3.1什么是对象

    对象是从类中走出来的,只要类加( ),这就是一个实例化过程,这个就会实例化一个对象

    class Human:
        mind = "有思想"
        def __init__(self):
            print(666)
            print(self)
    
        def work(self):
            print('人类会工作')
    
        def tools(self):
            print('人类会使用工具')
    obj = Human()  #  只要实例化对象,它会自动执行  ___init__方法
    print(obj)   #  obj 的地址与 self 的地址相同
    

    其实实例化对象总共发生了三件事情

    1.在内存中开辟了一个对象空间,

    2.自动执行init 方法,并将这个对象空间(内存地址) ,传递给了 init方法的第一个位置参数 self

    3.在 init 方法中,通过self给对象空间添加属性

    ![image-20190802194737784](/Users/zhl/Library/Application Support/typora-user-images/image-20190802194737784.png)

    class Human:
        mind = "有思想"
        language = "使用语言"
        def __init__(self,name,sex,age,hobby): # self 和 obj指向的是同一个内存地址和同一个空间,
            # 下面就通过self 这个对象空间封装四个属性
            self.n = name
            self.s = sex
            self.a = age
            self.h = hobby
    obj = Human('barry','男',18,'运动')
    print(obj.__dict__)   # {'n': 'barry', 's': '男', 'a': 18, 'h': '运动'}
    

    3.2 对象操作对象空间所有属性

    3.21对象查询对象中所有属性
    对象.__dict__
    
    class Human:
        mind = "有思想"
        language = "使用语言"
        def __init__(self,name,sex,age,hobby): # self 和 obj指向的是同一个内存地址和同一个空间,
            # 下面就通过self 这个对象空间封装四个属性
            self.n = name
            self.s = sex
            self.a = age
            self.h = hobby
    obj = Human('barry','男',18,'运动')
    print(obj.__dict__)   #   {'n': 'barry', 's': '男', 'a': 18, 'h': '运动'}
    
    3.22对象操作对象中的单个属性,万能的点
    class Human:
        mind = "有思想"
        language = "使用语言"
        def __init__(self,name,sex,age,hobby): # self 和 obj指向的是同一个内存地址和同一个空间,
            # 下面就通过self 这个对象空间封装四个属性
            self.n = name
            self.s = sex
            self.a = age
            self.h = hobby
    obj = Human('barry','男',18,'运动')
    
    #  增
    # obj.job = 'IT'
    # print(obj.__dict__)  #  {'n': 'barry', 's': '男', 'a': 18, 'h': '运动', 'job': 'IT'}
    
    #  删
    # del obj.n
    # print(obj.__dict__)   #    {'s': '男', 'a': 18, 'h': '运动'}
    

    3.3 对象查看类中的属性

    class Human:
        mind = '有思想'
        language = '实用语言'
        def __init__(self,name,sex,age,hobby):
            self.n = name
            self.s = sex
            self.a = age
            self.h = hobby
    obj = Human('zhou','男',18,'画画')
    print(obj.mind)
    print(obj.language)
    obj.a = 666
    print(obj.a)
    

    3.4对象操作类中的方法 (自己的理解是调用函数)

    class Human:
        mind = '有思想'
        language = '实用语言'
        def __init__(self,name,sex,age,hobby):
            self.n = name
            self.s = sex
            self.a = age
            self.h = hobby
    
        def work(self):
            print(self)
            print('人类会工作')
    
        def tools(self):
            print(self)
            print('人们会使用工具')
    obj = Human('barry','女',18,'写作')
    obj.work()
    obj.tools()
    

    类中的方法都是通过对象执行的,并且对象执行这些方法都会自动将对象空间传给方法中的第一个参数self

    self 是什么?

    self 其实是类中方法(函数)的第一个位置参数,只不过解释器会自动的将调用这个函数对象给self,所以咱们把类中的方法的第一个参数约定俗成设置成self, 代表这个就是对象。
    

    一个类可以实例化多个参数

    class Human:
        mind = '有思想'
        language = '实用语言'
        def __init__(self,name,sex,age,hobby):
            self.n = name
            self.s = sex
            self.a = age
            self.h = hobby
    
        def work(self):
            print(self)
            print('人类会工作')
    
        def tools(self):
            print(self)
            print('人们会使用工具')
    
    obj1= Human('小胖','男',20,'美女')  
    obj2= Human('相爷','男',18,'肥女')
    print(obj1,obj2)  #<__main__.Human object at 0x10483d080> <__main__.Human object at 0x10483d208>
    print(obj1.__dict__) # {'n': '小胖', 's': '男', 'a': 20, 'h': '美女'}
    print(obj2.__dict__) # {'n': '相爷', 's': '男', 'a': 18, 'h': '肥女'}
    
  • 相关阅读:
    深入解析DC/OS 1.8 – 高可靠的微服务及大数据管理平台
    Mesos源码分析
    Openvswitch原理与代码分析(8): 修改Openvswitch代码添加自定义action
    Openvswitch原理与代码分析(7): 添加一条流表flow
    Openvswitch原理与代码分析(6):用户态流表flow table的操作
    Openvswitch原理与代码分析(5): 内核中的流表flow table操作
    Openvswitch原理与代码分析(4):网络包的处理过程
    Openvswitch原理与代码分析(3): openvswitch内核模块的加载
    Openvswitch原理与代码分析(2): ovs-vswitchd的启动
    Openvswitch原理与代码分析(1):总体架构
  • 原文地址:https://www.cnblogs.com/hualibokeyuan/p/11291243.html
Copyright © 2011-2022 走看看