编程语言
首页 > 编程语言> > python入门(五)

python入门(五)

作者:互联网

  通过前面的学习我们知道,事与物都是对象,我们都能将其定义为一个类,python中将该类定义为object,我们所创建的类都是直接或间接继承与object,他们都有object类的属性和方法,面向对象有抽象、继承、封装、多态四个特性。

抽象

  创建类要通过class关键字来创建,比如有一个人,我们要实现他的类,我们把它抽象为Person

  class Person:

    pass  #如果没有想要封装的属性我们可以通过pass关键字来结束

封装

  对象有自己的属性和方法,比如一个人,他有自己的姓名和年龄的属性,他能干什么这是他的方法,我们可以定义他的名字属性为name,年龄为age,他能跑步、说话的方法,我们可以定义跑步run(),speak()

  class Person:

    name = 'Tom'

    age = 18

    def run(self):

      print('我正在跑步')

    def speak(self):

      print('我正在说话')

  p = Person()   #   p就是类的一个实例体现

  print(p.name,p.age)   #打印结果: Tom 18

  p.run()  #打印结果:  我正在跑步       调用run()方法我们不用传入参数,self是对象的实例,直接用p.run()就能实现实例方法

  p.spaek()   #打印结果: 我正在说话

  这样我们就创建了一个叫Tom的人,但是我们通过p2 = Person()再创建一个人,我们打印他的名字和年龄会发现,他也叫Tom,但是这两个人显然不是同一个人,我们需要的是通过这个类来创建另外一个叫jack的人,并且运行方法run()他们会打印不同的跑路方式

  class Person:

    name = 'Tom'

    age = 18

    def __init__(self,name=None):  #name=None表示参数可以不传入,当不传入参数创建实例时我们的name在实例中找不到就回去类中去找,实例的name还是Tom

      if name is not None:

        self.name = name

    def run(self,where):

      print('%s在%s跑步'%(self.name,where))

  p = Person('jack')

  p2 = Person('jerry')

  print(p.name,p2.name)   #   打印结果: jack   jerry

  p.run('公园')  #打印结果:jack在公园跑步

  p2.run('马路')  #打印结果:jerry在马路跑步

  我们是怎么实现Person('jack')就创建了一个叫jack的人呢,这里我们用到了__init__()方法,我们在创建类的时候,会自动调用__init__()方法,我们重新定义__init__(),在里面加入name参数,我们把jack传入到Person类中进行调用创建实例,并改变实例的name.

继承

  什么是继承,比如猫和狗,他们都有相同的特性,他们都是动物,那么我们可以把动物当成一个类Animal,猫抽象Cat类,狗抽象为Dog类,猫会叫,狗也会叫,动物会叫,所以我们定义一个方法cry()

  class Animal:

    def cry(self):

      print('呜呜呜')

  class Cat(Animal):

    pass

  class Dog(Animal):

    pass

  cat = Cat()

  cat.cry()   #打印结果: 呜呜呜

  dog = Dog()

  dog.cry()  #打印结果:呜呜呜

  我们发现打印的是呜呜呜,那么我们就调用了Animal的cry()方法,我们的cat在调用cry()时在Cat类中找不到,就回去父类去找,找不到就会去祖父类去找,知道object类,如果还找不到就会报错

  我们要实现猫叫喵喵喵,就从写cry()方法

  class Cat(Animal):

    def cry(self):

      print('喵喵喵')

  cat = Cat()

  cat.cry()  #打印结果: 喵喵喵

  我们这样实现会发现不是很对劲,为什么不直接实现Cat类不去继承Animal,这样我们就要考虑到什么情况使用继承比较好,那就是有些属性和方法是固定不变的那么实现继承就是正确的。

多态

  什么是多态?比如a=1,那么就会创建一个int类型值为1的对象,为什么会把1认定为就是int型呢?python是一门动态编程语言,在内部后自动对1进行判断,然后赋给他int类型,这是多态的体现,也就是人们提出的鸭子模型,如果一个物体跑起来像鸭子,那么他就是鸭子,多态更注重于方法的实现,不在关注类本身。

  class Duck:

    def run(self):

      print('我像一只鸭子')

  class A:

    def run(self):

      print('我看起来像一只鸭子')

  def func(obj):

    obj.run()

  duck = Duck()

  a = A()

  func(duck)  #我像一只鸭子

  func(a)  #我看起来像一只鸭子

  那么我们说duck和a都是一只鸭子

 

标签:run,入门,python,self,cry,Person,class,name
来源: https://www.cnblogs.com/llm123456/p/11872934.html