Python面向对象编程 一

发布时间:2019-06-23 08:43:10编辑:auto阅读(1875)

    一、类

        面向对象是对函数进行分类和封装,其主要目的是提高程序的重复实用性,让开发更方便快捷。

        在我们的认知中,我们会根据属性相近的东西归为一类。例如:鱼类,鱼类的共同属性是呼吸,卵生。任何一个鱼都在此鱼类基础上创建的。

        定义人鱼类fish:   

        class fish:

        have_breath = True

        reproduction = 'egg'

        先定义一个类别class,就是鱼fish,在这里面定义了两个变量,一个是有呼吸have_breath,一个是升职方式reproduction,这两个就是鱼类的属性。

        

        现在我养了一条金鱼,叫goldfish。它就是一个实际的对象,且属于鱼类,利用定义的fish类:

              goldfish = fish()

              print goldfish.reproduction 

        第一句为创建对象,说明goldfish是fish中的一个对象,goldfish就有了鱼类的属性,对属性的引用是通过,对象.属性的形式实现的。

    二、方法

        类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。

        例如: 

        #定义鱼类

        class fish:

                #变量

            have_breath = True

            reproduction = 'egg'  

                #新增方法,移动距离

               def move(self, dx):

                    position = dx

                    return position

        goldfish = fish()

        print 'move:',goldfish.move(10)

        

        重新定义了鱼类fish,新增一个方法属性move,方法的第一个参数self是必须要写的,不管用不用得到。

        在调用move方法时,只传递dx参数即可。

    三、面向对象的三大特性

       继承、 封装、多态

    1、继承

       可简单理解为子继承父的内容,下面再利用鱼类举例子。

       鱼类分为,金鱼、鳄鱼等。

       #金鱼类(gdfish):

      class gdfish(fish):

    eat_person = False

    have_fin = True

       #鳄鱼类(Crocilisk):

      class Crocilisk(fish):

    eat_person = True

    have_fin = False

     #定义金鱼对象,调用gdfish类

     goldfish = gdfish()

     #打印gdfish自身的属性

     print goldfish.eat_person

     #打印fish类父类的属性

     print goldfish.have_breath

     #调用fish类父类的方法

     print 'move:',goldfish.move(10)

    得到的:

        True

        False

        move: 10

       以上例子为新定义两个类,金鱼类gdfish和鳄鱼类Crocilisk,增加了两个属性,是否吃人eat_person,是否有鱼鳍have_fin 。括号内代表的是父类fish。即金鱼类gdfish和鳄鱼类Crocilisk是鱼类fish的子类,都继承了fish的属性与方法,可以直接调用和使用父类fish的方法和属性。上面的对象goldfish ,虽然只是针对金鱼类gdfish进行了实例化,但是因金鱼类gdfish自动继承了鱼类fish的属性和方法,所以,对象goldfish 就自动有了fish的属性和方法。

       通过继承,可以减少程序中重复信息和重复语句。如果分别定义两个类别金鱼类和鳄鱼类,而不是通过继承,那么就需要把鱼类的属性和方法分别写到金鱼类和鳄鱼类的定义中,这样就显得代码臃肿繁琐,继承特性减少了此类问题的发生。


    2、封装

       封装,即为将内容封装到某处,然后再去调用北封装在某处的内容。

       例如:

        #定义鱼类

        class fish:

        def __init__(self,dx)

        self.dx = dx

        goldfish = fish(10) 

        当程序执行时,self是一个形式参数,goldfish = fish(10),self等于goldfish 

        所以,内容就被封装到goldfish 里面。goldfish 对象又有dx移动属于。下面就来显示调用其封装的内容。

    (1)、通过对象直接调用

        

       class fish:

        def __init__(self,dx)

        self.dx = dx

        goldfish = fish(10)

        #通过 goldfish 直接调用dx属性。

        print goldfish.dx

    返回:10

      (2)、通过self间接调用

        class fish:

        def __init__(self,dx)

        self.dx = dx

            def  move(self):

                print self.dx

        goldfish = fish(10)

        #程序会将goldfish传递给self参数,通过调用fish类的方法,将封装的内容打印出来。

          goldfish.move() 

    返回:10

    3、多态

       多态的含义,字面理解多种表现形式。它在类的继承中得以实现,在类的方法调用中得以体现。多态意味着变量并不知道引用的对象是什么,根据引用的对象的不通表现不通的行为方式。下面通过例子来说明多态的含义。

        例如:

          动物的叫声

          猫叫声:喵喵。。。

          够叫声:汪汪。。。

          狼叫声:嗷嗷。。。

       代码:

         #定义动物类

        class animal:

                def __init__(self,name):

                        self.name = name

         #定义cat类,继承animal的属性name

        class cat(animal):

                def  shout(self):

                        return 'miaomiao'

        #定义dog类,继承animal的属性name

        class dog(animal):

                def  shout(self):

                        return 'wangwang'

         #定义wolf类,继承animal的属性name

        class wolf(animal):

                def  shout(self):

                        return 'wangwang'

        #定义对象cat1,针对cat类实例化

        cat1 = cat('zhenni')

        #调用animal的类的属性name和cat1的自己的方法shout

        print cat1.name + ':' + cat1.shout()

       由上面的例子可以看出,针对动物的叫,猫、狗、狼的叫声都是不一样的,各有各的特点,但是对于父类animal,每个子类都继承了父类的属性名字,但各自又有自己不同的特点,由此可见子类显示了多态的特性。


关键字