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

    什么是面向对象?

      1.要了解面向对象必须要知道什么是面向过程.什么是面向过程呢?

        面向过程是解决问题的方法,也就是一种编程思想.面向过程主要可以由两个方向理解:面向>>面对;

    过程>>是解决问题的步骤和流程.目的是将一个复杂问题拆分为若干小问题,按照步骤一一解决.讲一个复杂问题流程化,为其制定一个固定的实现流程,从而变得简单

        面向过程的优缺点:优点:复杂问题简单化

                 缺点:实现流程固定,一旦中间环节发生改变将导致整体全部都需要修改

                   维护性差,可扩展性差

        使用场景:对扩展性要求较低或者基本没有要求的软件(linux内核,脚本等)

       2.面向对象

        面向对象是一种编程思想,及代码实现方式方法; oop object oriented prgraming的缩写

        将程序看成是一堆对象的集合,实现功能的方式就是对象之间的交互来实现

        面向对象的优缺点:优点:不需要考虑繁琐的实现步骤,扩展性高,维护性高,耦合性低

                    缺点:复杂度比面向过程高,且无法预知执行结果

        使用场景:要求扩展性高时,对于不要求扩展性的程序而言,使用面相增加了程序的复杂程度

    为什么要使用面向对象?

      因为程序与用户打交道,用户需求千变万化,对扩展性要求高,所以需要使用面向对象

    类与对象

        什么是对象? 指的是具备某些特征与技能的结合体,是实际存在的

        什么是类? 类是一个抽象概念,不是实际存在的,是根据一些类具有相同特征和技能的对象抽取获得

        类和对象的关系>> 类包含了一些列具有相同特性和技能的对象   对象属于某个类的实例

           类名要使用大驼峰的方式来写(首字母大写)
                  用变量描述特征  obj指一个对象
                  通过调用类得到对象,也称之为实例化或创建对象

        在创建对象时,会申请一个新的内存可能空间,将对象中的内容存进去

        存放属性的位置有两个,一个是类中,另外一个是对象中,当每个对象的某个特征都相同时则放在勒种,如果不同则放在对象中

        对象中数据查找的顺序:查找顺序>>>对象->>类 

        当对象中不存在时,会到类中寻找数据
              如果对象中存在属性,会有优先使用对象中的数据

        __dict__ 可以获取一个对象中包含的所有内容

        当创建一个类的时候,产生一个名称空间,存储类中的名称与值的绑定关系
                当创建一个对象的时候,产生一个名称空间,存储对象中的名称与值的绑定关系
             类还有作为对象的模板的作用,所有属于同一个类的对象都具备类中的公共内容

    绑定方法

      绑定:把两个东西捆绑在一起    方法:>>函数  在类中函数即方法

      绑定方法:就是将数据与处理数据的函数绑定在一起

      为什么要把函数和对象绑定在一起?

        调用函数时,变成调用函数的方法          对象的本质就是一种存放数据的容器

      为什么要把数据和函数绑定在一起?      函数适用于处理数据的代码

      如何绑定?     >>>绑定方法有两种,一种是绑定给对象,另外一种是绑定给类

      绑定给类的方法:使用一个装饰器叫@classmethod,必须有一个参数,表示当前类,参数名也可以自己定义但是不建议

     1 #绑定对象
     2 class Student:
     3     school = "BeiJing"
     4 
     5     def __init__(self, name, age, sex):
     6         self.name = name
     7         self.age = age
     8         self.sex = sex
     9 
    10     def learning(self):
    11         print("正在学习..")
    12 
    13     def sayHI(self):
    14         print("hello my name is %s my age:%s my sex:%s" % (self.name, self.age, self.sex))
    15 
    16 #通过对象获取
    17 stu1 = Student("一个学生","man",18)
    18 stu1.sayHI()
    19 #通过类获取
    20 Student.sayHI(stu1)
    21 '''---------------------'''
    22 #绑定类
    23 class Students:
    24     school = 'fudan'
    25     #初始化函数
    26     def __init__(self,name,age,sex):
    27         self.name = name
    28         self.age =age
    29         self.sex = sex
    30     
    31     def sayHI(self):
    32     print(self.name,'hello')
    33     
    34     @classmethod
    35     def print_school_name(cls):
    36     print(cls.school)    
    37 
    38 Student.print_school_name()
    39                             
    绑定对象及绑定类

      调用方法:

        绑定给对象:

          对象绑定方法 可以使用对象调用,也可以使用类名调用
          在对象调用时会自动传入对象自己
          类调用是不会自动传参,需要手动传参
        绑定给类:
          类绑定方法   用类调用
          对象也可以调用,并且都会自动传入这个类

      非绑定方法:

     1 class Teacher():
     2     def __inti__(self,name,sex):
     3         self.name = name
     4         self.sex = sex
     5         
     6     @staticmethod
     7     def testfunc(num):
     8         print('testfunc run !')
     9         print(num)
    10     
    11 Teacher.testfunc(1)
    非绑定方法

        在类中既不绑定给方法,也不绑定给对象;即既不需要访问类的数据,也不需要访问对象的数据,就可以作为一个非绑定方法

        特点:没有自动传参数的效果 ; 类和对象都能调用 ; 就是一个普通函数  

    初始化函数:

     1 class Person:
     2     def __init__(self,name,age):
     3         print("执行了 __init__")
     4         print(self)
     5         self.name = name
     6         self.age =age
     7 
     8 p1 = Person("张三丰",80)
     9 
    10 print(p1.__dict__)
    11 
    12 p2 = Person("李狗蛋",20)
    13 print(p2.__dict__)
    View Code

      对象一旦被创建,就应该进行初始化

      初始化函数名称是固定的的,带有__开头__结尾的函数时一些内置的特殊函数,会在一定的时间点自动触发执行

      __inti__用于初始化对象,会在创建对象时候自动执行,传入调用类时传入的参数 该函数会在调用类时自动触发执行,self参数必须有,表示要进行初始化的对象
            self不需要传值,系统会自动传值

    总结:

       一个方法到底是要绑定给方法还是要绑定给类
          当要处理的数据包含在类中时候,不需要绑定给对象,应该绑定给类
          当要处理的数据包含在对象中时候,应该绑定给对象 

       类的绑定方法与对象的绑定方法的相同点和不同点
            相同点:
                1.都会自动传值
                2.都可以被方法和类调用
            不同点:
                1.对象绑定方法在对象调用时传的是对象自己
                2.类绑定方法自动传的是类自己
                3.第一个参数:一个叫cls 一个叫self

        为什么要绑定?
              简化代码,提高效率

    学习,学习,学习! 学习是为了更好的未来,不要让别人瞧不起你,加油!!!
  • 相关阅读:
    nginx 配置详解
    ngnix 负载均衡
    nginx 安装搭建与配置介绍
    11.15java实习生面试总结
    笔试题:编写一个用户注册接口
    java第一次笔试+面试总结
    《啊哈算法》读后总结(下)
    java常见排序算法
    Tomcat安装及配置教程
    算法题:购买n个苹果,苹果6个一袋或者8个一袋,若想袋数最少,如何购买?
  • 原文地址:https://www.cnblogs.com/yangyufeng/p/10116054.html
Copyright © 2011-2022 走看看