zoukankan      html  css  js  c++  java
  • Python 面向对象基础知识

    面向对象基础知识

    1.什么是面向对象编程?

    - 以前使用函数

    - 类 + 对象

     

    2.什么是类什么是对象,又有什么关系?

     

    class 类:
      def 函数1():
        pass
      def 函数2():
        pass
    
    # obj是对象,实例化的过程
    obj = 类()
    obj.函数1()

    ========== 面向对象不好 ============

    ========== 函数编程好 ==============

     

     - 有时候,函数编程能实现?比较麻烦。

     - 面向对象非常的简单就能实现。

     

    3.什么时候适用面向对象?

    - 1.当多个函数有公共的参数的时候

    - 2.根据一个模板创建某些东西

    - 3.链接服务器,执行命令,关闭

    注:面向对象,可以进行更多的修改需求修改。

     

    4.self就是调用当前方法的对象。

    - 函数(方法)保存在类里面。

    - 字段保存在对象内存下。

     

     

    5.静态字段的使用场景。

    - 创建的每一个字段都有共同的值,就可以设置为静态字段。

     

    成员属性

    class Foo:
    
      def __init__(self,name):
    
        #普通字段,属性
    
        self.NAME = name
    
        self.Country = "中国"

    全局属性

    class Foo:
    
      #静态字段,公有属性
    
      Country = "中国"
    
      def __init__(self,name):
    
        self.NAME = name

     

    6.面向对象三大特性,继承,封装,多态。

    封装:

    - 类中封装:字段,方法

    - 对象中封装了:普通字段的值

     

    例子

    class F1:
    
      def __init__(self,n):
    
        self.N = n
    
        print('F1')
    
     
    
    class F2:
    
      def __init__(self,arg1):
    
        self.a = arg1
    
        print('F2')
    
     
    
    class F3:
    
      def __init__(self,arg2):
    
        self.b = arg2
    
        print('F3')
    
     
    
    o1 = F1('alex')
    
    o2 = F2(o1)
    
    o3 = F3(o2)
    
    ########### 输出Alex:o3.b.a.N###########
    
    #o1 = F1('alex')
    
    #o2 = F2(o1)
    
    #o3 = F3(o2)
    
    #print(o3.b.a.N)
    
    #执行结果
    
    #alex
    
    #注: o3包含o2包含o1包含N赋值alex。

     

    继承:

    例子:

    求出结果:对应继承。

    class F1:
    
       def __init__(self):
    
          print('F1')
    
     
    
        def a1(self):
    
            print('F1a1')
    
        def a2(self):
    
            print('F1a2')
    
     
    
     
    
    class F2(F1):
    
        def __init__(self):
    
            print('F2')
    
        def a1(self):
    
            print('F2a1')
    
        def a2(self):
    
            self.a2()
    
            print('F2a2')
    
     
    
     
    
    class F3(F2):
    
        def __init__(self):
    
            print('F3')
    
     
    
    # def a1(self):
    
    # print('F3a1')
    
     
    
    def a2(self):
    
        print('F3a1')
    
     
    
    obj = F3()
    
    obj.a1()                        

    多态:

    - python:默认支持多态,没有类型限制

    - 多态:多种形态。

     

     

    7.字段与方法

    字段:

    普通字段(保存在对象中)

    静态字段(保存在类中)

     

    方法:

    普通方法(保存在类中,调用者对象,至少有一个self参数)

    class F1:
    
        ...
    
        def a1(self):
    
            print(self.name)
    
     
    
    obj = F1()
    
    obj.a1 = a1()
    
    # 注:obj 对象内存没有存入数据,会占用内存。    

     

    静态方法(保存在类中,调用者类,无需创建对象,可以有任意个参数):

    class F1:
    
        @staticmethod
    
        def a1():
    
            print(self.name)
    
     
    
    F1.a1()
    
    # 注:相当于函数 @staticmethod。

    8.知识总结

      属性

        1.实例变量 (实例内存)

        2.类变量(类内存)

        3.私有属性_var

      方法

        1.构造方法

        2.析构函数

        3.私有方法

     

    对象

      实例化一个类后得到的对象

     

    封装

      把一些功能的实现细节不对外暴露

     

    继承

      做用:代码的重用

      1.继承组合

          class Foo(object):
    
            def __init__(self,name,age,sex,类元素)#析构函数
    
              super(Teacher,self).__init_(name,age,sex)#继承
    
              self.person = Person(self,job) #组合,关联两个基类
    
     
    
              #相当于实例化了一个类
    
              self.类名 = 类元素 #以组合的形式实现代码的重用。

      2.单继承

      3.多继承      

          2.7经典类,深度优化,新式类,广度优先
    
          3.x均是广度优先
          class Foo(object): #都写新式类
    
            def __init__(self,name,age,sex,salary)#析构函数
    
     
    
              #新式类写法,推荐
    
              super(Teacher,self).__init_(name,age,sex) #继承父类,先重构侯后继承。
    
     
    
              #经典类写法,单个继承父类,不推荐
    
              SchoolMember.__init__(self,name,age,sex) #继承父类

    多态

    接口重用,一种接口多种实现

    一种接口,可以自动匹配多个实例

  • 相关阅读:
    Leetcode 33.搜索旋转排序数组
    Leetcode 32.最长有效括号
    Leetcode 31.下一个排列
    Leetcode 30.与所有单词相关联的子串
    Leetcode 25.k个一组翻转链表
    Leetcode 24.两两交换链表中的节点
    做数据分析需要“搞”人?
    求职互联网数据分析,如何准备行业知识?
    如何利用Social Listening从社会化媒体中“提炼”有价值的信息?
    运营实操|如何利用微信后台数据优化微信运营
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/7821483.html
Copyright © 2011-2022 走看看