Python继承
继承用于类的创建上,新创建的叫子类,而被继承的叫做父类。子类可以使用父类属性,继承是描述类与类之间的关系。
为什么要用继承呢?因为继承可以减少代码的冗余以及提高代码的重用性。
python继承种类
单继承、多继承、多层继承。
一、单继承
即子类只能继承一个父类。通过继承,子类可以重用父类的代码,并可以扩展或修改父类的功能。
class animal:
def eat(self):
print("吃")
def drink(self):
print("喝")
class dog(animal):
def speak(self):
print("汪汪叫")
dog1 = dog()
dog1.eat() #吃
dog1.drink() #喝
在本例中,dog1可以直接使用animal类中的eat和drink两个方法。
而且一个神奇的事情是,继承是具有传递性的。子类拥有父类的方法和属性,同时也具有父类的父类所具有的属性。
二、多继承
即子类可以继承多个父类。通过多继承,子类可以从多个父类中继承属性和方法。
class A():
def test(self):
print("test")
class B():
def demo(self):
print("demo")
class C(A,B):
pass
c = C()
c.test() #输出结果为test
c.demo() #输出结果为demo
三、方法的重写
若父类的方法不能满足子类的要求,子类可以重写父类的方法,以实现父类功能。注意方法名相同
class animal:
def say(self):
print("叫")
class dog(animal):
def say(self):
print("汪汪叫")
四、super( )函数
在子类中调用父类的方法时,可以使用super()函数。super()函数可以引用直接父类的方法,以便在子类中扩展父类的功能。
例子:
假设我们有一个父类Animal
和一个子类Dog
,如下所示:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError("子类必须实现此方法")
class Dog(Animal):
def speak(self):
return f"{self.name} says Woof!"
在这个例子中,Dog
类继承了Animal
类,并重写了speak
方法。如果我们直接在Dog
类中使用父类Animal
的名字来调用speak
方法,那么当speak
方法被重写时,我们将无法访问到子类的实现。为了解决这个问题,我们可以使用super()
函数来调用父类的speak
方法,如下所示:
class Dog(Animal):
def speak(self):
return super().speak() + f"{self.name} says Woof!"
注意事项:
super()
函数只能在类的方法中使用,不能在全局范围内使用。- 当使用
super()
函数时,需要确保父类的方法已经被正确地重写。否则,super()
函数将无法找到正确的方法并引发错误。 - 如果子类没有重写父类的方法,可以直接使用父类的名字来调用该方法。但是,如果子类重写了父类的方法,建议使用
super()
函数来调用父类的方法,以避免潜在的错误。
五、多学一招
isinstance() 函数
isinstance()函数可以用来判断一个对象是否是某个类的实例。它可以用于检查继承关系。
issubclass() 函数
issubclass()函数可以用来判断一个类是否是另一个类的子类。它可以用于检查类的继承关系。
代码实例:
print(isinstance(dog1, dog)) #输出结果为True
print(issubclass(dog, animal)) #输出结果为True
Python多态
简单的来说就是一种事物的不同表现形态
首先,我们定义一个基类Animal
,它有一个方法make_sound
:
class Animal:
def make_sound(self):
pass
然后,我们定义两个子类Dog
和Cat
,它们分别继承自Animal
类,并实现了make_sound
方法:
class Dog(Animal):
def make_sound(self):
return "汪汪汪"
class Cat(Animal):
def make_sound(self):
return "喵喵喵"
接下来,我们定义一个函数play_sound
,它接受一个Animal
类型的参数,并调用其make_sound
方法:
def play_sound(animal):
print(animal.make_sound())
最后,我们可以创建Dog
和Cat
对象,并调用play_sound
函数:
dog = Dog()
cat = Cat()
play_sound(dog) # 输出:汪汪汪
play_sound(cat) # 输出:喵喵喵
这个例子展示了Python中的多态特性,即使我们使用不同的对象(Dog
和Cat
),只要它们都是Animal
类型的实例,就可以调用相同的方法(make_sound
)。