• 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
  • 相关阅读:
    DotText源码阅读
    看来这世界看得太清楚了也未必是种好事呢~~~~~~~
    在Init之前究竟执行了什么?
    孙子兵法
    Excel区域重命名
    Getbuffer ReleaseBuffer Cstring
    批量删除svn标志
    VB制作网页自动填表(强烈推荐)
    GetModuleFileName
    ansi编码
  • 原文地址:https://www.cnblogs.com/xyz2b/p/10528302.html
Copyright © 2020-2023  润新知