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__()其实都是一个意思,不会影响调用,换句话说继承父类就是,如果你子类里没有定义的属性,那么会直接调用父类的属性。

posted @ 2021-06-18 19:10  Circle_Wang  阅读(1137)  评论(0编辑  收藏  举报