什么是面向对象编程

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

 

例1 , 某些方法被反复调用. 如: 登录服务器并上传文件. 

函数式编程:

def upload():
    # 连接服务器
    # 上传文件
    # 关闭

def cmd():
    # 连接服务器
    # 执行命令
    # 关闭

def upload_cmd():
    # 连接服务器
    # 上传文件
    # 执行命令
    # 关闭

 

面向对象编程:

class SSH:
    def __init__(self, host, port, pwd, username):
        self.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.close()


obj = SSH(.......)
obj.connection()
obj.cmd()
obj.cmd()
obj.upload()
obj.cmd()
obj.close()

注:  若需要改变服务器连接, 函数式编程所有函数都需要修改;  而面向对象编程只需要更改connection()方法即可. 

 

例2: 多个函数需要传入多个共同的参数. 如:多个函数需要的参数有相同部分也有不同部分(类似java中方法重载)

函数式编程:

def f1(host, port, pwd, arg)
    pass

def f2(host, port, pwd, arg, arg2)
    pass

def f3(host, port, pwd, arg, arg2, arg3)
    pass


f1(1,1,1,2)
f2(1,1,1,2,2)
f3(1,1,1,2,2,3)

 

面向对象编程:

class Foo:
    def __init__(self, host, port, pwd):
        self.host = host
        self.port = port
        self.pwd = pwd

    def f1(arg):
        pass
    
    def f2(arg,arg2):
        pass

    def f3(arg, arg2, arg3):
        pass


obj = Foo(1,1,1)
obj.f1(1)
obj.f2(2,2)
obj.f3(3,3,3)

 

 

什么时候适用面向对象

  • 多个步骤在不同函数中反复调用.可以将各个步骤抽取出来写在一个类中,每个步骤写一个方法,这样调用时就可以任意组合.
  • 根据一个模版创建某些东西(也是加以某些限制)
  • 多个函数传入多个共同的参数时,可以写在一个类中,共同的参数抽取出来写在构造函数中.

 

class Foo:
    # 静态字段 (公有属性), 适合每一个对象都有的共同的值时, 把这个值抽取出来作为静态字段.
    country = "中国"

    def __init__(self, name, count):
        # 普通字段(普通属性)
        self.name = name
        self.count = count

    def bar(self):
        pass


obj1 = Foo('河南', 100000)
obj1.bar()

 

封装:

  • 类中封装: 字段, 方法
  • 对象中封装: 普通字段的值
  • 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)
    
    print(o3.b.a.n)  # 输出alex
    封装

相关文章: