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

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