python 类和函数调用加括号与不加括号区别;类 super(). 您所在的位置:网站首页 if加括号和不加有啥区别吗 python 类和函数调用加括号与不加括号区别;类 super().

python 类和函数调用加括号与不加括号区别;类 super().

2024-07-11 16:57| 来源: 网络整理| 查看: 265

参考:https://blog.csdn.net/maqian5/article/details/100731715

1、类和函数加括号与否

a、类 不加括号调用不会初始化实例(init)函数

class clsTest(): y = 'you' def __init__(self): self.y = 'me' print(clsTest) x = clsTest print (x) print(x.y) x = clsTest() print(x.y)

在这里插入图片描述 b、函数 加括号了才能执行函数并return值

def bracket(data): return data print (bracket) # 不带括号调用的结果:,a是整个函数体,是一个函数对象,不须等该函数执行完成 a = bracket print (a) # 带括号调用的结果:6 ,b是函数执行后返回的值6,须等该函数执行完成的结果 b = bracket(6) print (b)

在这里插入图片描述

2、类 super().init()、super().+父方法

a、super().init()相当于子类里初始化父类并加载实例; super(Dog, self).init()写法等同于super().init();子类里可以重新赋值属性值或新增加子类自己的属性

class Animal: # 定义一个父类 def __init__(self): # 父类的初始化 self.name = "animal" self.role = 'parent' print('I am father') class Dog(Animal): # 定一个继承Animal的子类 def __init__(self): # 子类的初始化函数,此时会覆盖父类Animal类的初始化函数 # super(Dog, self).__init__() # 在子类进行初始化时,也想继承父类的__init__()就通过super()实现,此时会对self.name= 'animal' super().__init__() print(self.name) print('I am son') self.name = 'dog' # 定义子类的name属性,并且会把刚才self.name= 'animal'更新为'dog' xbai = Dog()#I am father,I am son print(xbai.name)#'dog' print(xbai.role)#'parent'

在这里插入图片描述

b、传值super().init(“cat”) ;相当于给父类重新赋值实例值;本例相当于重新给name从初始值"animal"改为"cat"

class Animal: # 定义一个父类 def __init__(self,name="animal"): # 父类的初始化 self.name = name self.role = 'parent' print('I am father') class Dog(Animal): # 定一个继承Animal的子类 def __init__(self): # 子类的初始化函数,此时会覆盖父类Animal类的初始化函数 # super(Dog, self).__init__() # 在子类进行初始化时,也想继承父类的__init__()就通过super()实现,此时会对self.name= 'animal' # super().__init__() super().__init__("cat") print(self.name) print('I am son') self.name = 'dog' # 定义子类的name属性,并且会把刚才的self.name= 'animal'更新为'dog' xbai = Dog()#I am father,I am son print(xbai.name)#'dog' print(xbai.role)#'parent'

在这里插入图片描述 c、super().aa(“cc”);super().+父方法调用

class Person(): def __init__(self): print('我是Peson的__init__构造方法') def aa(self,kk): print("aaa",kk) class Student(Person): def __init__(self): super().__init__() super().aa("cc") print('我是Student的__init__构造方法') stu = Student() stu.aa("dd") 3、类装饰器和类里面方法有装饰器使用

a、类装饰器 decorator即是装饰器函数,输入的cls是一个类,返回也是一个类(其实返回一个可调用对象就可以,例如函数)。所以其实上文的类装饰器就相当于:

Model = decorator(Model)

def decorator(cls): print ("6666666") return cls @decorator class Model(object): def __init__(self): print ("model created") if __name__ == '__main__': model = Model()

在这里插入图片描述

b、类里面方法有装饰器使用

正常函数装饰器

import time def zhuangshi(fuc): def wraper(*args): t1 = time.time() res = fuc(*args) t2 = time.time() print("time:{:.4f}".format(t2-t1)) return res #下面装饰函数有return时候需要写这句才能出下面函数的return值 return wraper @zhuangshi def p(num): for i in range(num): print(i) print(p(3))

改写成类里面方法有装饰器(@AA.zhuangshi 进行调用,方法加staticmethod)

import time class AA: @staticmethod def zhuangshi(fuc): def wraper(*args): t1 = time.time() res = fuc(*args) t2 = time.time() print("time:{:.4f}".format(t2-t1)) return res #下面装饰函数有return时候需要写这句才能出下面函数的return值 return wraper @AA.zhuangshi def p(num): for i in range(num): print(i) print(p(3))


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有