zoukankan      html  css  js  c++  java
  • 类的三大装饰器之property

    # property:
    
    import math
    class Circle(object):
        def __init__(self, r):
            self.r = r
    
        @property  # 把一个方法伪装成一个属性,调用这个方法时不需要加括号就直接得到返回值
        def area(self):
            return math.pi * self.r**2
    
    c = Circle(5)
    print(f'半径:{c.r}, 面积:{c.area}')
    
    
    import time
    class Person(object):
        def __init__(self, name, birth):
            self.name = name
            self.birth = birth
    
        @property
        def age(self):  # 所以装饰的这个方法不能有参数
            return time.localtime().tm_year - self.birth
    
    TB = Person('太白', 1998)
    print(TB.age)
    
    
    # property的第二个应用场景:和私有属性合作的
    class User(object):
        def __init__(self, user, pwd):
            self.user = user
            self.__pwd = pwd
    
        @property
        def pwd(self):
            return self.__pwd
    
    alex = User('alex', 123)
    print(alex.pwd)
    
    
    # property进阶:
    class Goods(object):
        discount = 0.8
    
        def __init__(self, name, oringin_price):
            self.name = name
            self.__price = oringin_price
    
        @property
        def price(self):
            return self.__price * self.discount
    
        @price.setter
        def price(self, new_price):
            print('调用我了---')
            if isinstance(new_price, int):
                self.__price = new_price
    
        @price.deleter
        def price(self):
            print('执行我了')
            del self.__price
    
    
    apple = Goods('apple', 5)
    print(apple.price) # 查看被@property装饰的price函数
    
    apple.price = 10  # 调用的是被setter装饰的price
    print(apple.price)
    
    # del apple.price  # 调用的是被deleter装饰的price,而这里只是调用方法,要在方法内部执行删除
    # print(apple.price)
  • 相关阅读:
    set集合 浅层拷贝会和深层拷贝
    "is"与"=="
    元组和字典
    运算符和列表
    Python 基础语法
    supervisor 安装配置详解
    如何运行vue项目
    过目不忘JS正则表达式
    vue Bus总线
    Robot Framework 环境安装(一)
  • 原文地址:https://www.cnblogs.com/GOD-L/p/13541033.html
Copyright © 2011-2022 走看看