• Python面向对象编程


    1.面向过程编程
    以函数为单元,一组函数的顺序执行

    #面向过程
    lang1={'name':'C++','score':'9.0'}
    lang2={'name':'Python','score':'8.5'}
    def langinfo(lang):
        print '%s:%s'%(lang["name"],lang["score"])
    langinfo(lang1)
    langinfo(lang2)

    运行结果:

    2.面向对象编程
    以对象为单位,对象拥有属性和方法

    #面向对象
    class Lang(object):
        def __init__(self,name,score):
            self.name=name
            self.score=score
        def langinfo(self):
            print '%s:%s'%(self.name,self.score)
    lang1=Lang('C++','9.0')
    lang2=Lang('Python','8.5')
    lang1.langinfo()
    lang2.langinfo()

    运行结果:

    3.封装
    对象可提供属性和方法,供外部调用,隐藏内部实现细节,和私有信息。
    私有变量:属性名称前加两个下划线__

    class Lang(object):
        def __init__(self,name,score):
            self.__name=name
            self.score=score
        def langinfo(self):
            print '%s:%s'%(self.__name,self.score)
    lang1=Lang('C++','9.0')
    lang2=Lang('Python','8.5')
    print lang1.score
    print lang1.__name

    运行结果:

    可以看出,__name为私有变量(private),score为公有变量(public)
    那么如何修改私有变量的值?
    通过公有方法设置和获取私有变量的值:

    class Lang(object):
        def __init__(self,name,score):
            self.__name=name
            self.score=score
        def langinfo(self):
            print '%s:%s'%(self.__name,self.score)
        def setName(self,name):
            self.__name=name
        def getName(self):
            print self.__name
    lang1=Lang('C++','9.0')
    lang2=Lang('Python','8.5')
    lang1.setName('C')
    lang1.getName()

    运行结果:

    4.继承
    子类拥有父类的全部功能

    #继承
    class Lang(object):
        def __init__(self,name,score):
            self.__name=name
            self.score=score
        def langinfo(self):
            print '%s:%s'%(self.__name,self.score)
    class C(Lang):
        pass
    class Python(Lang):
        pass
    lang1=C('C++','9.0')
    lang2=Python('Python','8.5')
    lang1.langinfo()
    lang2.langinfo()

    运行结果:

    子类如何拥有自己的功能?子类中定义和父类一样类型的方法,会覆盖父类的方法

    class Lang(object):
        def __init__(self,name,score):
            self.name=name
            self.score=score
        def langinfo(self):
            print '%s:%s'%(self.name,self.score)
    class C(Lang):
        pass
    class Python(Lang):
        def langinfo(self):
            print "hello %s!"%(self.name)
    lang1=C('C++','9.0')
    lang2=Python('Python','8.5')
    lang1.langinfo()
    lang2.langinfo()

    运行结果:

    5.多态
    子类一定是父类的实例,父类不一定是子类的实例

    #多态
    class Lang(object):
        def __init__(self,name,score):
            self.name=name
            self.score=score
        def langinfo(self):
            print '%s:%s'%(self.name,self.score)
    class C(Lang):
        pass
    class Python(Lang):
        def langinfo(self):
            print "hello %s!"%(self.name)
    lang1=C('C++','9.0')
    lang2=Python('Python','8.5')
    lang3=Lang('Lang','10.0')
    print isinstance(lang1,C)
    print isinstance(lang1,Lang)
    print isinstance(lang3,C)
    print isinstance(lang3,Lang)

    运行结果:

    因为子类一定是父类的实例,因此可以将子类实例申明为父类类型

    class Lang(object):
        def __init__(self,name,score):
            self.name=name
            self.score=score
        def langinfo(self):
            print '%s:%s'%(self.name,self.score)
    class C(Lang):
        pass
    class Python(Lang):
        def langinfo(self):
            print "hello %s!"%(self.name)
    def test(lang):
        lang.langinfo()
    lang1=C('C++','9.0')
    lang2=Python('Python','8.5')
    test(lang1)
    test(lang2)

    运行结果:

    调用langinfo时,会使用子类实例的方法,这就是多态的意义。

  • 相关阅读:
    4. Object
    3. string
    8. 滚动条美化
    7. 单位,移动布局
    2. js的异步
    2. 即时通讯
    让PHP更快的提供文件下载
    phpstorm+xdebug远程调试设置
    postman自动生成签名
    一位技术人员成长历程
  • 原文地址:https://www.cnblogs.com/shijingjing07/p/7210576.html
Copyright © 2020-2023  润新知