装饰器

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)

 



 

posted @ 2022-10-21 15:01  夜未央leo  阅读(31)  评论(0编辑  收藏  举报