python 类和函数调用加括号与不加括号区别;类 super(). | 您所在的位置:网站首页 › if加括号和不加有啥区别吗 › python 类和函数调用加括号与不加括号区别;类 super(). |
参考: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)
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'
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 实验室设备网 版权所有 |