Python知识补充
一、类方法的强制重写与禁止重写
1、强制重写
需求:父类的一个方法,强制子类去重写
方式一:
把父类变成抽象基类,然后给指定的方法加上装饰器@abc.abstractmethod
import abc class Animal(metaclass=abc.ABCMeta): @abc.abstractmethod def speak(self): pass class Dog(Animal): def speak(self): print(‘汪汪叫‘) class Cat(Animal): pass d = Dog() d.speak() c = Cat() c.speak()
方式二:
指定方法排除NotlmplementedError异常
import abc class Animal(metaclass=abc.ABCMeta): @abc.abstractmethod def speak(self): # 给父类的speak方法加上异常语句,它会帮我们检测,这个方法在子类中有没有被重新实现,如果没有,则抛出异常 raise NotImplementedError class Dog(Animal): def speak(self): print(‘汪汪叫‘) class Cat(Animal): pass d = Dog() d.speak() c = Cat() c.speak()
2、禁止重写
其实这个说法也不太准确,实际是可以重写的,但是无法生效而已
先看下面的常规例子:
class Base: def go(self): print("base") def run(self): self.go() class Extend(Base): def go(self): print("extend") p = Extend() p.run() >> extend
输出结果很正常,和我们预期的一样
接着我们借助私有函数,私有函数的作用范围仅在当前类。
class Base: def __go(self): print("base") def run(self): self.__go() class Extend(Base): def __go(self): print("extend") p = Extend() p.run() >>base
仔细观察,区别只是一个是公开函数,一个是私有函数,其表象上可以被重写,但是实际上并无重写的效果。
相关推荐
夜斗不是神 2020-11-17
huavhuahua 2020-11-20
Yasin 2020-11-16
xiaoseyihe 2020-11-16
千锋 2020-11-15
diyanpython 2020-11-12
chunjiekid 2020-11-10
wordmhg 2020-11-06
YENCSDN 2020-11-17
lsjweiyi 2020-11-17
houmenghu 2020-11-17
Erick 2020-11-17
HeyShHeyou 2020-11-17
以梦为马不负韶华 2020-10-20
lhtzbj 2020-11-17
pythonjw 2020-11-17
dingwun 2020-11-16
lhxxhl 2020-11-16