zoukankan      html  css  js  c++  java
  • Python学习之路:面向对象补充

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

    ---以前使用函数

    ---类+对象

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

    class 类:

      def 函数1():

        pass

      def 函数2():

        pass

    #obj 是对象,实例化的过程

    obj = 类()

    obj.函数1()

    ########## 面向对象不好 #########

    ########## 函数编程好 ###########

    有时候,函数编程能实现,比较麻烦;

    面向对象可以非常简短快速的实现;

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

    ---如果多个函数需要传入多个共同参数时,可将多个参数封装到面向对象

    ---根据一个模板创建某些东西的时候

    ---应用场景

    #分别采用面向对象和函数的方法实现“连接服务器、上传文件和执行命令、关闭连接的功能”
    class SSH:
        def __init__(self,host,port,pwd,username):
            self.host = host
            ...
        def connection(self):
            # 创建连接
            self.conn = 和雾浮起创建的链接对象()
    
        def close(self):
            # 关闭
            self.conn.关闭
    
        def upload(self):
            self.conn.使用链接上传文件
    
        def cmd(self):
            self.conn.使用链接执行命令
    
    obj = SSH(...)
    obj.connection()
    obj.upload()
    obj.cmd()
    obj.close()
    
    #-----------------函数式编程-------------------
    def upload():
        # 连接服务器
        # 上传文件
        # 关闭服务器
    
    def cmd():
        # 连接服务器
        # 执行命令
        # 关闭服务器
    

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

    ---静态字段的适用场景,每个对象中保存相同的东西时,可以使用静态字段

    class Foo:
        #静态字段
        #公有属性
        country = "中国"
        def __init__(self,name,count):
            # 普通字段
            # 普通属性
            self.NAME = name
            self.count = count
           # self.country = "中国"
    
        def bar(self):
            pass
    
    obj1 = Foo("河南",100000)
    obj1.bar()
    obj2 = Foo("山东",120000)
    obj2.bar()
    

     5、封装

    ----类中封装了:字段、方法;

    ----对象中封装了:普通字段(普通属性)的值;

    #---------封装---------------
    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 ==> o2
    #o2.a ==> o1
    o3.b.a.N
    

       继承

    ###-------继承######
    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 a2(self):
            self.a2()
            print('F2a2')
    
    class F3(F2):
        def __init__(self):
            print('F3')
    
        def a2(self):
            print('F3a2')
    
    obj = F3()
    obj.a2()
    obj.a1()
    

     多态(多种形态):

    6、字段:

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

        静态字段(保存在类中)

    方法:

        普通方法(保存在类中,调用者是对象)

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

    ###-------静态方法######
    class F1:
        @staticmethod
        def a1(a1,a2):
            print('Alex')
    F1.a1(1,2)
    

         

  • 相关阅读:
    bzoj 1121: [POI2008]激光发射器SZK 思维_结论
    bzoj 1189: [HNOI2007]紧急疏散evacuate 分层图最大流 + 拆点 + 二分
    luogu 3467 [POI2008]PLA-Postering 单调栈
    BZOJ1143: [CTSC2008]祭祀river 网络流_Floyd_最大独立集
    BZOJ 1123: [POI2008]BLO 求割点+乘法原理+计数
    bzoj 1191: [HNOI2006]超级英雄Hero 网络流 + 残量网络
    无题
    numpy模块(对矩阵的处理,ndarray对象)
    python面向过程编程
    logging模块,程序日志模板
  • 原文地址:https://www.cnblogs.com/xiaobai005/p/8335602.html
Copyright © 2011-2022 走看看