• (python)面向对象


    函数式编程和面向对象对比

    a. round 1 请开发一个消息提醒的功能(邮件/短信/微信)
                    def email(em,text):
                        """
                        发送邮件
                        :return:
                        """
                        print(em,text)
    
                    def msg(tel,text):
                        """
                        发送短信
                        :return:
                        """
                        print(tel,text)
    
                    def wechat(num,text):
                        """
                        发送微信
                        :return:
                        """
                        print(num,text)
    
    
                    # 编写功能:假设用户购买课程,然后给alex发送提醒;
                    if 1==1:
                        msg('188888888','张进购买了一个学位课')
                        email('alex@sb.com','张进购买了一个学位课')
                        wechat('xxxx','张进购买了一个学位课')
    函数
        class Message:
                        def email(self, em, text):
                            """
                            发送邮件
                            :return:
                            """
                            print(em,text)
    
                        def msg(self, tel, text):
                            """
                            发送短信
                            :return:
                            """
                            print(tel,text)
    
                        def wechat(self, num, text):
                            """
                            发送微信
                            :return:
                            """
                            print(num,text)
    
    
                    # 编写功能:假设用户购买课程,然后给alex发送提醒;
                    if 1==1:
                        obj = Message()
                        obj.email('alex@sb.com', '张进购买了一个学位课')
                        obj.msg('188888888','张进购买了一个学位课')
                        obj.wechat('xxxx','张进购买了一个学位课')
    面向对象

    初步对比:

        函数:定义简单/调用简单

        面向对象:定义复杂/调用复杂/  好处:归类,将某些类似的函数写在一起

    总结:

             1.函数式编程可能会比面向对象好.

        2.python中支持的两种编程方式

        3.面向对象方式格式

          定义:    class 类名          定义了一个类

                def  函数名(self)     在类中编写了一个"方法"

                  pass

          调用:

            x1 = 类名()          创建了一个对象/实例化了一个对象

            x1.函数名()          通过对象调用其中一个方法

                        class Account:
                            def login(self):
                                user = input('请输入用户名:')
                                pwd = input('请输入密码:')
                                if user == 'alex' and pwd == 'sb':
                                    print('登录成功')
                                else:
                                    print('登录失败')
    
                        obj = Account()
                        obj.login()
    实例

    a. round 2 打印
    """
    完成以下功能:
    老狗/20岁/男/上山去砍柴
    老狗/20岁/男/开车去东北
    老狗/20岁/男/喜欢大宝剑
    """
    def kc(name,age,gender):
                    data = "%s,性别%s,今年%s岁,喜欢上山砍柴" %(name,gender,age)
                    print(data)
    
                def db(name,age,gender):
                    data = "%s,性别%s,今年%s岁,喜欢开车去东北" %(name,gender,age)
                    print(data)
    
                def bj(name,age,gender):
                    data = "%s,性别%s,今年%s岁,喜欢大宝剑" %(name,gender,age)
                    print(data)
    
    
                kc('老狗',20,'')
                kc('老狗',20,'')
                db('老狗',20,'')
                bj('老狗',20,'')
    函数版本
                class LaoGou:
    
                    def __init__(self,name,age,gender): # 特殊的方法,如果 类名() ,则该方法会被自动执行 (构造方法)
                        self.n1 = name
                        self.n2 = age
                        self.n3 = gender
    
                    def kc(self):
                        data = "%s,性别%s,今年%s岁,喜欢上山砍柴" %(self.n1,self.n3,self.n2)
                        print(data)
    
                    def db(self):
                        data = "%s,性别%s,今年%s岁,喜欢开车去东北" %(self.n1,self.n3,self.n2)
                        print(data)
    
                    def bj(self):
                        data = "%s,性别%s,今年%s岁,喜欢大宝剑" %(self.n1,self.n3,self.n2)
                        print(data)
    
                obj = LaoGou('老狗',20,'')
                obj.kc()
                obj.db()
                obj.bj()
    面向对象
    总结:
      1.构造方法
          实例一:
          
                            class Foo:
                                
                                def __init__(self,name):     构造方法,目的进行数据初始化.
                                    self.name = name 
                                    self.age = 18 
                            
                            obj = Foo('侯明魏')
    通过构造方法
    通过构造方法,可以将数据进行打包,以后使用时,去其中获取即可.
      2.应用
        a.将数据封装到对象中,以供自己在方法中调用
                            class FileHandler:
                                def __init__(self,file_path):
                                    self.file_path = file_path
                                    self.f = open(self.file_path, 'rb')
    
                                def read_first(self):
                                    # self.f.read()
                                    # ...
                                    pass
    
                                def read_last(self):
                                    # self.f.read()
                                    # ...
                                    pass
    
                                def read_second(self):
                                    # self.f...
                                    # ...
                                    pass
                                
                            obj = FileHandler('C:/xx/xx.log')
                            obj.read_first()
                            obj.read_last()
                            obj.read_second()
                            obj.f.close()
    封装

        b.将数据封装到对象中,以供其他函数调用

     1                         def new_func(arg):
     2                             arg.k1
     3                             arg.k2
     4                             arg.k6
     5 
     6                         class Foo:
     7                             def __init__(self,k1,k2,k6):
     8                                 self.k1 = k1
     9                                 self.k2 = k2
    10                                 self.k6 = k6
    11 
    12                         obj = Foo(111,22,333)
    13                         new_func(obj)
    =-=

    练习:

    1:用户登录

    2:显示当前的用户信息

    3:查看当前用户所有账单

    4:购买姑娘形状的抱枕

     1                 class UserInfo:
     2 
     3                     def __init__(self):
     4                         self.name = None
     5 
     6                     def info(self):
     7                         print('当前用户名称:%s' %(self.name,))
     8 
     9                     def account(self):
    10                         print('当前用户%s的账单是:....' %(self.name,))
    11 
    12                     def shopping(self):
    13                         print('%s购买了一个人形抱枕' %(self.name,))
    14 
    15                     def login(self):
    16                         user = input('请输入用户名:')
    17                         pwd = input('请输入密码:')
    18                         if pwd == 'sb':
    19                             self.name = user
    20                             while True:
    21                                 print("""
    22                                     1. 查看用户信息
    23                                     2. 查看用户账单
    24                                     3. 购买抱枕
    25                                 """)
    26                                 num = int(input('请输入选择的序号:'))
    27                                 if num == 1:
    28                                     self.info()
    29                                 elif num ==2:
    30                                     self.account()
    31                                 elif num == 3:
    32                                     self.shopping()
    33                                 else:
    34                                     print('序号不存在,请重新输入')
    35                         else:
    36                             print('登录失败')
    37 
    38                 obj = UserInfo()
    39                 obj.login()
    实例

    面向对象的代码如何编写

      a.规则

     1             class Foo:
     2                 
     3                 def __init__(self,name):
     4                     self.name = name 
     5                     
     6                     
     7                 def detail(self,msg):
     8                     print(self.name,msg)
     9                     
    10             obj = Foo()
    11             obj.detail()
    规范

     b.什么时候写,如何写?

      方法一:归类+提取公共值

        

     1                     class File:
     2                         def file_read(self,file_path):
     3                             pass
     4 
     5                         def file_update(self,file_path):
     6                             pass
     7 
     8                         def file_delete(self,file_path):
     9                             pass
    10 
    11                         def file_add(self,file_path):
    12                             pass
    13 
    14                     class Excel:
    15                         def excel_read(self,file_path):
    16                             pass
    17 
    18                         def excel_update(self,file_path):
    19                             pass
    20 
    21                         def excel_delete(self,file_path):
    22                             pass
    23 
    24                         def excel_add(self,file_path):
    25                             pass
    归类
     1                     class File:
     2                         def __init__(self,file_path):
     3                             self.file_path = file_path
     4                             
     5                         def file_read(self):
     6                             pass
     7 
     8                         def file_update(self):
     9                             pass
    10 
    11                         def file_delete(self):
    12                             pass
    13 
    14                         def file_add(self):
    15                             pass
    16 
    17                     class Excel:
    18                         def __init__(self,file_path):
    19                             self.file_path = file_path
    20                             
    21                         def excel_read(self):
    22                             pass
    23 
    24                         def excel_update(self):
    25                             pass
    26 
    27                         def excel_delete(self):
    28                             pass
    29 
    30                         def excel_add(self):
    31                             pass
    32             
    提取公共值

      

      方法二:在指定类中编写和当前类的所有相关代码 + 提取公共值

     1     class Message:
     2                     def email(self):    
     3                         pass 
     4                 
     5                 class Person:
     6                     def __init__(self,na, gen, age, fig)
     7                         self.name = na
     8                         self.gender = gen
     9                         self.age = age
    10                         self.fight =fig
    11                         
    12                     def grassland(self):    
    13                         self.fight = self.fight - 10  
    14                         
    15                     def practice(self):
    16                         self.fight = self.fight + 90   
    17                         
    18                     def incest(self):
    19                         self.fight = self.fight - 666
    20                         
    21                 
    22                 cang = Person('苍井井', '', 18, 1000)    # 创建苍井井角色
    23                 dong = Person('东尼木木', '', 20, 1800)  # 创建东尼木木角色
    24                 bo = Person('波多多', '', 19, 2500)      # 创建波多多角色
    25             
    26                 dong.grassland()
    类代码和公共值

    面向对象的三大特性:封装/继承/多态

      封装:

        将相关的功能封装到一个类中:   

      class Message:
    
                def emil(self):pass
    
                def msg(self):pass
    
                def wechat(self):pass
    ...

        将数据封装到一个对象中:

      class Message:
    
                def emil(self):pass
    
                def msg(self):pass
    
                def wechat(self):pass
    ...

       继承:

                class SuperBase:
                        def f3(self):
                            print('f3')
    
                    class Base(SuperBase):  # 父类,基类
                        def f2(self):
                            print('f2')
    
                    class Foo(Base):        # 子类,派生类
                        
                        def f1(self):
                            print('f1')
                            
                    obj = Foo()
                    obj.f1()
                    obj.f2()
                    obj.f3()
                    # 原则:现在自己类中找,么有就去父类
    =-=

     

    总结:
    1. 继承编写

    class Foo(父类):
    pass

    2. 支持多继承(先找左/再找右)


    3. 为什么要有多继承? 提供代码重用性

        多态:

        多种形态或者多种状态

          由于python原声支持多态,所以没有特殊性

     1 class Foo1:
     2                     def f1(self):
     3                         pass 
     4                 
     5                 class Foo2:
     6                     def f1(self):
     7                         pass 
     8                 
     9                 class Foo3:
    10                     def f1(self):
    11                         pass 
    12                         
    13                         
    14                 def func(arg):
    15                     arg.f1()
    16                     
    17                 obj = Foo1() # obj= Foo2()   obj = Foo3()
    18                 func(obj)
    python
                    class Son(list):
                        pass 
                    
                    class Son1(list):
                        pass 
                    
                    # 以后传参时,arg可以是:list类的对象/list任何子类的对象
                    public void func(list arg){
                        print(arg)
                    }
                    
                    # obj = list()
                    # obj = Son()
                    obj = Son1()
                    func(obj)
    java伪代码

      

     












  • 相关阅读:
    RQNOJ 117 最佳课题选择:多重背包
    RQNOJ 95 多多看DVD(加强版):01背包
    RQNOJ 624 运动鞋:dp
    RQNOJ 622 最小重量机器设计问题:dp
    bzoj 3262 陌上花开
    bzoj 3224 Tyvj 1728 普通平衡树
    bzoj 4196 软件包管理器
    luogu 3953 逛公园
    bzoj 2157 旅行
    luogu 3384 【模板】树链剖分
  • 原文地址:https://www.cnblogs.com/xintiao-/p/9542569.html
Copyright © 2020-2023  润新知