嗨!听说你对继承和多态的概念很感兴趣?那你可来对地方了!
首先,让我们来谈谈继承。它就像人类的家族关系,不是吗?你的爸爸有一个特定的面貌和性格,你也继承了他的特点。在Python中也是一样的,你可以创建一个类,然后在该类的基础上创建另一个类,这个过程就像继承一样。
-
继承的作用:解决代码重用问题,提高开发效率
-
继承的语法格式:
class 子类名(父类名): pass ```
-
单继承:子类只继承一个父类
-
多层继承:继承关系为多层传递,如生活中的爷爷、父亲、儿子
-
子类重写父类同名方法:在子类中定义了一个和父类同名的方法(参数也一样)
-
子类调用父类同名方法:super().同名方法(形参1, ……)
-
多继承特点:子类有多个父类
-
多继承语法格式:
class 子类名(父类1, 父类2, ……): pass
-
子类调用父类同名方法:
-
父类名.同名方法(self, 形参1, ……):调用指定的父类
-
super(类名, self).同名方法(形参1, ……):调用继承顺序中类名的下一个类的同名方法
-
super().同名方法(形参1, ……):调用先继承父类的同名方法
-
私有方法、属性不能直接继承使用
举个例子,我们假设你有一只狗,名叫Buddy,它有各种各样的特点,比如它非常喜欢玩球,喜欢在公园里奔跑,还喜欢吃骨头。现在,你想创建一个猫类,这只猫要有和Buddy类似的特点,比如说它喜欢玩玩具,喜欢在院子里乱跑,还喜欢吃鱼。由于猫和狗有一些相同的特点,我们可以使用继承来创建猫类,这样就可以避免重复编写代码啦!
class Dog:
def __init__(self, name, breed, color, favorite_toy, favorite_food):
self.name = name
self.breed = breed
self.color = color
self.favorite_toy = favorite_toy
self.favorite_food = favorite_food
def play(self):
print(f"{self.name} is playing with {self.favorite_toy}!")
def eat(self):
print(f"{self.name} is eating {self.favorite_food}!")
class Cat(Dog):
def __init__(self, name, breed, color, favorite_toy, favorite_food):
super().__init__(name, breed, color, favorite_toy, favorite_food)
self.cat_specific_attribute = "has a tail"
def play(self):
print(f"{self.name} is playing with {self.favorite_toy}. It's a cat-toy!")
def eat(self):
print(f"{self.name} is eating {self.favorite_food} and {self.cat_specific_attribute}!")
上面的例子中,我们创建了一个Dog类和一个Cat类。Cat类继承了Dog类的所有属性和方法,同时还增加了一个新的属性cat_specific_attribute,以及play和eat方法的修改。这就是继承的基本概念!
接下来是多态。想象一下,你正在看电视,突然看到了一只恐龙!你不确定它是真是假,所以你想摸摸它看看它是不是真实的。但是,当你伸出手时,却发现你的电视遥控器不见了。于是你用了你的手机去触摸这只恐龙。这就是多态!在你的电视遥控器和手机都代表了“遥控器”的概念时,它们都是“遥控器”的例子。在Python中也是一样的,尽管它们的类型不同,但它们仍然可以被用来做同样的事情。
让我们看一个例子。假设你有一个函数,可以打印出不同的狗的名字:
def say_hello(dog):
print(dog.name)
现在,你可以用不同的狗类实例来调用这个函数,比如:
Labs = Dog("Labs", "Labrador", "brown", "ball", "bones")
Pugs = Dog("Pugs", "Pug", "black", "ball", "bones")
Cat = Cat("Cat", "Tabby", "gray", "ball", "mouse")
say_hello( Labs ) # 输出 "Labs" 的名字
say_hello( Pugs ) # 输出 "Pugs" 的名字
say_hello( Cat ) # 引发错误!Cat 类没有 name 属性
以上就是多态的概念!尽管不同类型的实例具有不同的属性名称和值,但它们仍然可以被用来做同样的事情。只是在调用函数时需要确保传递的是具有相同属性名称和值的实例。
继承和多态是Python中面向对象编程的核心概念。继承可以帮助我们避免代码重复,多态则可以使我们的代码更加灵活和易于维护。当你掌握了这些概念,你就可以编写更加高效、可维护的Python代码啦!