首页 > Python入门教程 > Python面向对象编程
阅读数:57
Python类的继承
每次编写类的时候,并不是一定要从头开始写代码,新类可以通过继承从已有的类中自动获得已有的属性和方法,这个过程叫作继承;已有的类称为父类,而新类称为子类。
子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。继承这个术语还是比较形象的,就好像我们从父母那里继承了他们身上的某种特点,如黑头发、黑眼睛、黄皮肤。
子类的定义和普通类略有不同。我们通过一个例子来看一下,假设要为斑点狗定义一个类 SpottedDog,它是上一节介绍过的Dog类的子类。我们定义的子类的名称是 SpottedDog,然后在类名后面的括号中加入父类的名字 Dog,表示它是从 Dog 类继承而来的新类。
我们为这个新类定义了新的属性和新的方法,下面突出显示新创建的子类 SpottedDog 的代码。
我们创建 Dog 类的实例时,构造方法还是会提醒我们要输入参数 name 和 gender,因为继承了父类的 __init__() 方法,如图 1 所示。

图 1
我们为 SpottedDog 类创建了一个实例 dog3,指定这只小狗的名字为“Lucky”,它是一个“Boy”。然后为它的 isLarge 属性赋值为 True,接下来,调用父类的 Hello() 方法和子类的 Character() 方法,如图 2 所示。

图 2
我们看到子类 SpottedDog 既继承了 Dog 类的属性和方法,又拥有自己的属性和方法。我们还可以增加 SpottedDog 类自己的 __init__() 方法,下面突出显示了修改过的代码。
在 SpottedDog 类的 __init__() 方法中,我们用到了一个特殊的函数 super(),它的功能是将父类和子类关联起来,从而可以调用父类的 __init__() 方法。我们还在这个构造方法中增加了一个新的属性 spots,所以再创建 SpottedDog 类的实例时,需要为构造方法指定 3 个参数,如图 3 所示。

图 3
为 SpottedDog 类创建一个新的实例 dog4。在构造方法中指定它的 3 个参数,分别是“Happy”表示名称,“Boy”表示性别,“30”表示斑点数,如图 4 所示。

图 4
当再次调用 Character() 方法时,就可以看到,传递给构造方法的参数已经作为 spots 属性的值在使用了。
子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。继承这个术语还是比较形象的,就好像我们从父母那里继承了他们身上的某种特点,如黑头发、黑眼睛、黄皮肤。
子类的定义和普通类略有不同。我们通过一个例子来看一下,假设要为斑点狗定义一个类 SpottedDog,它是上一节介绍过的Dog类的子类。我们定义的子类的名称是 SpottedDog,然后在类名后面的括号中加入父类的名字 Dog,表示它是从 Dog 类继承而来的新类。
我们为这个新类定义了新的属性和新的方法,下面突出显示新创建的子类 SpottedDog 的代码。
class Dog: legs=None age=None isCute=None def __init__(self,name,gender): self.name=name self.gender=gender def Hello(self): print("Woof...Woof") print("My name is "+self.name+".") print("I am a "+self.gender+".") print("I want to play with you.") class SpottedDog(Dog): isLarge=None def Character(self): print("I am a spotted dog.") if self.isLarge==True: print("I am a large dog.")我们为 SpootedDog 类定义了一个新的属性 isLarge 和一个新的方法 Character()。在 Character() 方法中,判断 isLarge 属性是否等于 True,如果该属性等于 True,会打印 "I am a large dog."。
我们创建 Dog 类的实例时,构造方法还是会提醒我们要输入参数 name 和 gender,因为继承了父类的 __init__() 方法,如图 1 所示。

图 1
我们为 SpottedDog 类创建了一个实例 dog3,指定这只小狗的名字为“Lucky”,它是一个“Boy”。然后为它的 isLarge 属性赋值为 True,接下来,调用父类的 Hello() 方法和子类的 Character() 方法,如图 2 所示。

图 2
我们看到子类 SpottedDog 既继承了 Dog 类的属性和方法,又拥有自己的属性和方法。我们还可以增加 SpottedDog 类自己的 __init__() 方法,下面突出显示了修改过的代码。
class SpottedDog(Dog): isLarge=None def __init__(self,name,gender,spots): super().__init__(name,gender) self.spots=spots def Character(self): print("I am a spotted dog.") if self.isLarge==True: print("I am a large dog") print("I have "+ str(self.spots) +" spots in my body.")
在 SpottedDog 类的 __init__() 方法中,我们用到了一个特殊的函数 super(),它的功能是将父类和子类关联起来,从而可以调用父类的 __init__() 方法。我们还在这个构造方法中增加了一个新的属性 spots,所以再创建 SpottedDog 类的实例时,需要为构造方法指定 3 个参数,如图 3 所示。

图 3
为 SpottedDog 类创建一个新的实例 dog4。在构造方法中指定它的 3 个参数,分别是“Happy”表示名称,“Boy”表示性别,“30”表示斑点数,如图 4 所示。

图 4