装饰器
1,@property装饰器
''' @property装饰器
作用:将方法变成属性调用
注意事项: 1,属性名与方法名一定要区分开,不然会进入死循环(self._age,def age()) 2,实例化的对象使用属性时,不是调用属性(man._age),而是用的方法名(man.age) 3,@property其实就是实现了getter功能; @xxx.setter实现的是setter功能;还有一个 @xxx.deleter实现删除功能 4,定义方法的时候 @property必须在 @xxx.setter之前,且二者修饰的方法名相同(age()) 5,如果只实现了 @property(而没有实现@xxx.setter),那么该属性为 只读属性 ''' class Man(object): def __init__(self, gender = None, age = None, job = None): self.gender = gender self._age = age self.job = job @property def age(self): return self._age @age.setter def age(self,value): if isinstance(value,int): self._age = value else: raise ValueError('int type need') if __name__ == '__main__': man = Man() man.age = 18 # 注意这里使用的时.age,不是._age print(f'年龄:{man.age}')
2,装饰器
import time def display_time(func): def wraper(*args): # func 如果带参数的话,就带*args time1 = time.time() result = func(*args) time2 = time.time() print('time = ', time2-time1) return result # func有返回值,就有return,没有返回值就不需要 return wraper def is_prime(num): if num < 2: return False elif num == 2: return True else: for i in range(2,num): if num % i == 0: return False return True @display_time def count_prime_nums(maxnum): count = 0 for i in range(2, maxnum): if is_prime(i): print(' i = ', i) count = count + 1 return count c = count_prime_nums(10000) print(c)