Python3教程
作者: 时海 crazybean
继承与多态

单继承

编写类时,并非总是要从空白开始。如果你要编写的类是另一个现成类的特殊版本,可使用继承 。一个类继承 另一个类时,它将自动获得另一个类的所有属性和方法;原有的 类称为父类 ,而新类称为子类 。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。

例如,下面来定义student实例:

实例(Python 3.0+)

#!/usr/bin/python3
#类定义
class people:
   #定义基本属性
   name = ''
   age = 0
   #定义私有属性,私有属性在类外部无法直接进行访问
   __weight = 0
   #定义构造方法
   def __init__(self,n,a,w):
       self.name = n
       self.age = a
       self.__weight = w
   def speak(self):
       print("%s 说: 我 %d 岁。" %(self.name,self.age))
#单继承示例
class student(people):
   grade = ''
   def __init__(self,n,a,w,g):
       #调用父类的构函
       people.__init__(self,n,a,w)
    #自定义方法
       self.grade = g 

重写父类

重写父类的方法 对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写。为此,可在子类中定义一个这样的方法,即它与要重写的父类方法同名。这样,Python将不会考虑这

个父类方法,而只关注你在子类中定义的相应方法。

   #重写父类的方法

#重写父类的方法
def speak(self):
    print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))
s = student('ken',10,60,3)
s.speak()

输出:

ken 说: 我 10 岁了,我在读 3 年级

多态

同一个方法在不同的类中最终呈现出不同的效果,即为多态。

class Animal:
   def __init__(self,name):
       self.name = name
   def talk(self):
       pass
   @staticmethod  #静态方法使不需要实例化就可以调用。实现了一种接口,多种实现,可以后续对象可以重复调用这个接口
   def animal_talk(self):
       self.talk()
class Cat(Animal):
   def talk(self):
       print('Meow')
class Dog(Animal):
   def talk(self):
       print('Woof Woof')
d = Dog('asd')
d.talk()
c = Cat('zxc')
c.talk()
#能不能通过一种接口,使它们都可以叫
Animal.animal_talk(c)
Animal.animal_talk(d)
标签: talk、animal、父类、def、重写
一个创业中的苦逼程序员
  • 回复
隐藏