Python@函数装饰器以及super()父类继承
1、@函数装饰器
@是一个装饰器,针对函数,起调用传参的作用,一般用法是写在需要被装饰的函数前面
def funA(a):
print("It's funA")
@funA
def funC():
print("It's funC")
可以看到函数C就是被函数A装饰的函数,装饰的主要作用是:会立即执行装饰的函数(也就是立刻执行函数A),但是不会执行函数C,所以我们能看到,执行上述代码得到的是:
It's funA
可能会问那函数C起了什么作用呢?其实函数C会被认为是函数A的参数被传进到函数A,如果在函数A中执行参数(比如打印a),其实就是在打印函数C的地址:
def funA(a):
print("It's funA")
print(a)
a()
@funA
def funC():
print("It's funC")
It's funA
<function funC at 0x0000016E39625820>
It's funC
因此我们可以得知函数C被当作参数传入到函数A中,当A中对传入的参数操作时,其实就是在执行函数C
2、super()父类继承
我们常常在类的定义中看到super().__init__()或者super(classname,self).__init__()其实这是在定义类的时候调用父类的初始函数init。
class Base(): #定义父类
def __init__(self):
self.name = "爸爸"
print('Base create')
class ChildA(Base): #子类A
def __init__(self):
super().__init__() #运行到此行是会调用父类的__init__,因此会打印“Base create”
print(self.name) #此时这个子类里还没有属性叫做name,因此打印的是父类的属性
self.name = "儿子"
print(self.name) #上一行已经定义了属性name,因此这里打印的就是“儿子”
a = ChildA()
Base create
爸爸
儿子
super().__init__()或者super(classname,self).__init__()其实都是一个意思,不会影响调用,换句话说继承父类就是,如果你子类里没有定义的属性,那么会直接调用父类的属性。
以上内容如有错误,恳请指正