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
  • 相关阅读:
    java监听器之实现在线人数显示
    java之web开发过滤器
    java之MVC开发模式
    java之jsp内置对象
    java之jsp页面语法
    java之jsp实现动态网页
    java数据库(MySQL)之增删改查
    java数据库之JDBC
    java线程之线程通信控制
    java线程之线程通信
  • 原文地址:https://www.cnblogs.com/xyz2b/p/10528302.html
Copyright © 2011-2022 走看看