首页 > 代码库 > Python面向对象编程

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.scoreprint 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.__namelang1=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):    passclass Python(Lang):    passlang1=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):    passclass 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):    passclass 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):    passclass 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面向对象编程