Python是一门面向对象的编程语言,类的继承和多态是面向对象编程的两个重要特性。在Python中,类的继承可以让一个类“继承”另一个类的属性和方法,而多态则让不同的子类对象可以调用相同的父类方法,并产生不同的结果。
类的继承
在Python中,可以通过在类定义时使用括号指定继承哪个父类来实现类的继承。例如:
class Animal:
def __init__(self, name):
self.name = name
class Cat(Animal):
def meow(self):
print('Meow!')
class Dog(Animal):
def bark(self):
print('Woof!')
my_cat = Cat('Kitty')
print(my_cat.name) # 输出:Kitty
my_cat.meow() # 输出:Meow!
在上面的例子中,我们定义了一个Animal类和两个子类Cat和Dog。Cat和Dog都继承了Animal的属性和方法,Cat还扩展了一个meow方法,Dog扩展了一个bark方法。
多态
多态让不同的子类对象可以调用相同的父类方法,并产生不同的结果。例如:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError('Please implement this method in the subclass.')
class Cat(Animal):
def speak(self):
return 'Meow!'
class Dog(Animal):
def speak(self):
return 'Woof!'
animals = [Cat('Kitty'), Dog('Fido')]
for animal in animals:
print(animal.name + ' says ' + animal.speak())
在这个例子中,我们定义了一个Animal类,它有一个speak方法,但是这个方法并没有实现,而是抛出了一个NotImplementedError异常,因为我们希望子类必须覆盖它。然后我们定义了两个子类Cat和Dog,它们分别覆盖了speak方法,返回不同的结果。最后,我们创建了一个包含两个Animal子类对象的列表,然后遍历这个列表并调用每个对象的speak方法,产生不同的结果。
示例1
class Shape:
def __init__(self, x, y):
self.x = x
self.y = y
def draw(self):
raise NotImplementedError('Please implement this method in the subclass.')
class Square(Shape):
def draw(self):
print('Drawing a square at ({}, {}).'.format(self.x, self.y))
class Circle(Shape):
def draw(self):
print('Drawing a circle at ({}, {}).'.format(self.x, self.y))
shapes = [Square(0, 0), Circle(10, 10), Square(20, 20)]
for shape in shapes:
shape.draw()
在这个例子中,我们定义了一个Shape类,它有一个draw方法,但是这个方法并没有实现,而是抛出了一个NotImplementedError异常。然后我们定义了两个子类Square和Circle,它们覆盖了draw方法。最后,我们创建了一个包含两个Shape子类对象的列表,然后遍历这个列表并调用每个对象的draw方法,Circle和Square分别产生了不同的结果。
示例2
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError('Please implement this method in the subclass.')
class Cat(Animal):
def speak(self):
return 'Meow!'
class Dog(Animal):
def speak(self):
return 'Woof!'
class Mouse(Animal):
pass
animals = [Cat('Kitty'), Dog('Fido'), Mouse('Jerry')]
for animal in animals:
print(animal.name + ' says ' + animal.speak())
在这个例子中,我们定义了一个Animal类,它有一个speak方法,但是这个方法并没有实现,而是抛出了一个NotImplementedError异常,因为我们希望子类必须覆盖它。然后我们定义了两个子类Cat和Dog,它们分别覆盖了speak方法,返回不同的结果。我们还定义了一个Mouse类,它没有覆盖speak方法,所以它会使用父类的方法。最后,我们创建了一个包含三种不同Animal子类对象的列表,然后遍历这个列表并调用每个对象的speak方法,产生不同的结果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python类的继承与多态详细介绍 - Python技术站