Python继承和多态知识点复习


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!"

注意事项:

  1. super()函数只能在类的方法中使用,不能在全局范围内使用。
  2. 当使用super()函数时,需要确保父类的方法已经被正确地重写。否则,super()函数将无法找到正确的方法并引发错误。
  3. 如果子类没有重写父类的方法,可以直接使用父类的名字来调用该方法。但是,如果子类重写了父类的方法,建议使用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

然后,我们定义两个子类DogCat,它们分别继承自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())

最后,我们可以创建DogCat对象,并调用play_sound函数:

dog = Dog()
cat = Cat()

play_sound(dog)  # 输出:汪汪汪
play_sound(cat)  # 输出:喵喵喵

这个例子展示了Python中的多态特性,即使我们使用不同的对象(DogCat),只要它们都是Animal类型的实例,就可以调用相同的方法(make_sound)。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值