• 面向对象初阶


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

    #开发一个消息提醒的功能
    #函数版:
    def email(address,text):
        """
    
        :return:
        """
        print(address,text)
    def tel(num,text):
        """
    
        :param num:
        :param text:
        :return:
        """
        print(num,text)
    def wechat(num,text):
        """
    
        :param num:
        :param text:
        :return:
        """
        print(num,text)
    #编写功能:假如有人购买课程发送提醒信息
    if 1==1:
        
    
    #=========面向对象版本=========
    class Message:
        def email(address, text):
            """
    
            :return:
            """
            print(address, text)
    
        def tel(num, text):
            """
    
            :param num:
            :param text:
            :return:
            """
            print(num, text)
    
        def wechat(num, text):
            """
    
            :param num:
            :param text:
            :return:
            """
            print(num, text)
    # 编写功能:有人购买课程提醒
    if 1==1:
        obj=Message()
        obj.email('163@qq', "有人买啦")
        obj.tel(18888888, "有人买啦")
        obj.wechat('163@qq', "有人买啦")

    对比的结果:1函数,定义简单/调用简单 2面向对象:定义复杂/调用复杂/  好处就是 分类 把类似函数集合在一起

    面向对象的正常格式:

    定义:

    class 类名:    #定义了一个类

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

        pass

    调用:

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

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

    用户登录示例:

    class denglu:
        def login(self):
            user=input("请输入名字:")
            pwd=input("请输入密码:")
            if user=='alex'and pwd=='123':
                print("登陆成功")
            else:print("登录失败")
    obj=denglu()
    obj.login()
    面向对象版用户登录

    打印:

    请打印下列内容:

    老狗/20岁/男/上山去砍柴

    老狗/20岁/男/开车去东北

    老狗/20岁/男/喜欢大保健

    汪汪

    构造方法:

    示例一:
    class Foo:
        def __init__(self,name):
            self.name=name
            self.age=18
    obj=Foo('alex')
    示例二:
    class Bar:
        pass
    obj=Bar()
    

    应用:

    # 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 将数据封装到对象中,供其它函数调用
    # def new_func(arg):
    #     arg.k1
    #     arg.k2
    #     arg.k6
    # class Foo:
    #     def __init__(self, k1, k2, k6):
    #         self.k1 = k1
    #         self.k2 = k2
    #         self.k6 = k6
    # obj = Foo(111, 22, 333)
    # new_func(obj)

    2面向对象代码如何编写

    规则:

    class Foo:
        def __init__(self,name):
            self.name = name 
        def detail(self,msg):
            print(self.name,msg)
    obj = Foo()
    obj.detail()    

    什么时候写+如何写

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

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

    class Message:
        def email(self):    
            pass 
                    
    class Person:
        def __init__(self,na, gen, age, fig)
        self.name = na
        self.gender = gen
        self.age = age
        self.fight =fig
                            
    def grassland(self):    
        self.fight = self.fight - 10  
                            
    def practice(self):
        self.fight = self.fight + 90   
                            
    def incest(self):
        self.fight = self.fight - 666
                            
                    
    cang = Person('苍井井', '', 18, 1000)    # 创建苍井井角色
    dong = Person('东尼木木', '', 20, 1800)  # 创建东尼木木角色
    bo = Person('波多多', '', 19, 2500)      # 创建波多多角色
                
    dong.grassland()
    View Code

    3面向对象三大特性:封装,继承和多态

    封装:

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

    class Message:
        def email(self):pass
        def msg(self):pass
        def wechat(self):pass

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

    class Person:
        def __init__(self,name,age,gender):
            self.name = name
            self.age = age
            self.gender = gender    

    继承:先在自己类中找,没有再去父类中找

                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()
    View Code

    1,继承编写,2支持多继承(先左后右)3提高代码重用率

    多态: 多种形态,状态     

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

    鸭子模型;

    class Foo1:
        def f1(self):
        pass 
                    
    class Foo2:
        def f1(self):
        pass 
                    
    class Foo3:
        def f1(self):
        pass 
                            
                            
    def func(arg):
        arg.f1()
                        
    obj = Foo1() # obj= Foo2()   obj = Foo3()
    func(obj)
    View Code
  • 相关阅读:
    学Maven,这篇万余字的教程,真的够用了!
    15 个优秀开源的 Spring Boot 学习项目,一网打尽!
    Spring Boot2 系列教程(三十)Spring Boot 整合 Ehcache
    800java面试题
    Nginx开发从入门到精通
    曹工说mini-dubbo(1)--为了实践动态代理,我写了个简单的rpc框架
    redis好书推荐
    一步一步学solr--windows下solr5.4.0环境搭建
    Redis
    8 个最好的 jQuery 树形 Tree 插件
  • 原文地址:https://www.cnblogs.com/lingcai/p/9543316.html
Copyright © 2020-2023  润新知