zoukankan      html  css  js  c++  java
  • python property动态属性

    class Foo:
        def __init__(self):
            self.name = 'a'
    
        def bar(self):
            print('bar')
    
        # 属性/特性
        @property   #用于执行obj.per(只是一个对应关系,即执行obj.per找到@property下的per方法并执行,至于per方法里面做什么自定义)
        def per(self):
            print('123')
            return 1
        @per.setter #用于执行obj.per = 888(只是一个对应关系,即执行obj.per = 888找到@per.setter下的per方法并执行,至于per方法里面做什么自定义)
        def per(self,val):
            print(val)
        @per.deleter #用于执行del obj.per(只是一个对应关系,即执行del obj.per找到@per.deleter下的per方法并执行,至于per方法里面做什么自定义)
        def per(self):
            print(666)
    
    obj = Foo()
    #obj.per() #TypeError: 'NoneType' object is not callable
    r = obj.per
    #123
    print(r)
    #1
    obj.per = 888
    #888
    del obj.per
    #666
    from datetime import date, datetime
    class User:
        def __init__(self, name, birthday):
            self.name = name
            self.birthday = birthday
            self._age = 0
    
        # def get_age(self):
        #     return datetime.now().year - self.birthday.year
    
        @property
        def age(self):
            return datetime.now().year - self.birthday.year
    
        @age.setter
        def age(self, value):
            self._age = value
    
    if __name__ == "__main__":
        user = User("bobby", date(year=1987, month=1, day=1))
        user.age = 30  # 调用user对象中有@age.setter装饰器的函数age,即执行self._age = value,self._age = 30
        print(user._age)  # 调用user对象中的_age属性
        # 30
        print(user.age)  # 调用user对象中有@property装饰器的函数age,即执行datetime.now().year - self.birthday.year并返回
        # 32
  • 相关阅读:
    Web自动化测试之滑动验证码的解决方案
    设计模式之单例
    设计模式之原型
    设计模式之建造者
    DG环境RMAN删除归档报错RMAN-08137: archived log not deleted【转载】
    RFS[3]: No standby redo logfiles available for thread 1
    spring-boot之webflux简单入门
    spring-boot-security组件总结补充
    spring-boot启用security组件 · 下
    spring-boot启用security组件 · 中
  • 原文地址:https://www.cnblogs.com/xyz2b/p/10528302.html
Copyright © 2011-2022 走看看