zoukankan      html  css  js  c++  java
  • Python ---- 属性装饰器

    property源码帮助

    """
    Typical use is to define a managed attribute x:
            
            class C(object):
                def getx(self): return self._x
                def setx(self, value): self._x = value
                def delx(self): del self._x
                x = property(getx, setx, delx, "I'm the 'x' property.")
            
            Decorators make defining new properties or modifying existing ones easy:
            
            class C(object):
                @property
                def x(self):
                    "I am the 'x' property."
                    return self._x
                @x.setter
                def x(self, value):
                    self._x = value
                @x.deleter
                def x(self):
                    del self._x
    """
    class Person:
        def __init__(self, chinese, english, history):
            self._chinese = chinese
            self._eng = english
            self.__his = history
    
        def getscore(self):
            return (self._chinese, self._eng, self.__his)
    
        def gethis(self): # getter 可读
            return self.__his
    
        def sethis(self, value): # setter 可写
            self.__his = value
    
        def geteng(self):  # 只读属性
            return self._eng
    
        @property # 将下面方法变成类型属性那样可以直接访问他,根据property源码中帮助着写
        def chinese(self):
            return self._chinese
        
        @chinese.setter # 将下面方法中的属性进行修改
        def chinese(self,value):
            self._chinese = value
        
        @chinese.deleter
        def chinese(self):
            #del self._chinese
            print('del chinese')
    
    student1 = Person(80, 90, 88)
    # print(student1.gethis())
    print(student1.chinese)
    # 将方法当做属性应用
    student1.chinese = 100 
    print(student1.chinese)
    del student1.chinese
    
    #+++++++++++++++++++++++++优雅
    class Person:
        def __init__(self, chinese, english, history):
            self._chinese = chinese
            self._eng = english
            self.__his = history
    
        def getscore(self):
            return (self._chinese, self._eng, self.__his)
    
        def gethis(self): # getter 可读
            return self.__his
    
        def sethis(self, value): # setter 可写
            self.__his = value
    
        def geteng(self):  # 只读属性
            return self._eng
    
        @property # 将下面方法变成类型属性那样可以直接访问他,根据property源码中帮助着写
        def chinese(self):
            return self._chinese
        
        @chinese.setter # 将下面方法中的属性进行修改
        def chinese(self,value):
            self._chinese = value
        
        @chinese.deleter
        def chinese(self):
            #del self._chinese
            print('del chinese')
    
        eng = property(lambda self:self._eng, seteng)
        
    student1 = Person(80, 90, 88)
    # print(student1.gethis())
    print(student1.chinese)
    # 将方法当做属性应用
    student1.chinese = 100 
    print(student1.chinese)
    print(student1.eng)
    student1._eng = 200
    print(student1.eng)
  • 相关阅读:
    用Python计算最长公共子序列和最长公共子串
    两个有序数列,求中间值 Median of Two Sorted Arrays
    python判断平衡二叉树
    经验之谈:如何为你的机器学习问题选择合适的算法?
    跑道没了,它们还在跑:澳门赛狗业的遗孤
    钉钉:工作的归工作,生活的…也归工作?
    假·照骗,真·社交焦虑
    苹果市值破万亿,iPhone 会涨价吗?
    写日志(log)
    多维数组排序
  • 原文地址:https://www.cnblogs.com/k-free-bolg/p/14469195.html
Copyright © 2011-2022 走看看