码迷,mamicode.com
首页 > 编程语言 > 详细

Python面向对象编程

时间:2017-07-20 13:31:24      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:意义   对象   logs   images   __init__   http   设置   覆盖   hello   

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时,会使用子类实例的方法,这就是多态的意义。

Python面向对象编程

标签:意义   对象   logs   images   __init__   http   设置   覆盖   hello   

原文地址:http://www.cnblogs.com/shijingjing07/p/7210576.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!