• python property()函数:定义属性


    正常情况下,类包含的属性应该是隐藏的,只允许通过类提供的方法来间接的实现对类属性的访问和操作。

    class Person:
        #构造函数
        def __init__(self, name):
            self.name = name
        #设置name属性值的函数
        def setname(self, name):
            self.name = name
        #访问name属性值的函数
        def getname(self):
            return self.name
        #删除name属性值的函数
        def delname(self):
            self.name = "xxx"
    xiaobai = Person("xiaobai")
    #获取name属性值
    print(xiaobai.getname())
    #设置name属性值
    xiaobai.setname("xiaohei")
    print(xiaobai.getname())
    #删除name属性值
    xiaobai.delname()
    print(xiaobai.getname())
    
    xiaobai
    xiaohei
    xxx
    

    python中提供了property()函数,可以实现在不破坏类封装原则的前提下,让开发者依旧使用“类对象.属性”的方式操作类中的属性。

    class Person:
        #构造函数
        def __init__(self, name):
            self.__name = name #双前导下划线(私有属性)会导致解释器重写属性名称,以避免子类中的命名冲突
        #设置name属性值的函数
        def setname(self, name):
            self.__name = name
        #访问name属性值的函数
        def getname(self):
            return self.__name
        #删除name属性值的函数
        def delname(self):
            self.__name = "xxx"
        #为name属性配置property()函数
        name = property(getname, setname, delname, '说明文档')
    #调取说明文档的两种方式
    print(Person.name.__doc__)
    help(Person.name)
    xiaobai = Person("xiaobai")
    #获取name属性值
    print(xiaobai.name)
    #设置name属性值
    xiaobai.name = "xiaohei"
    print(xiaobai.name)
    #删除name属性值
    del xiaobai.name
    print(xiaobai.name)
    
    说明文档
    Help on property:
    
        说明文档
    
    xiaobai
    xiaohei
    xxx
    
  • 相关阅读:
    洛谷P2062 分队问题
    bzoj1800 飞行棋
    UVA11100 The Trip, 2007
    UVA11134 Fabled Rooks
    每天一道博弈论之“威佐夫博弈”
    每天一道博弈论之“A game”(伪博弈
    每天一道博弈论之“谁能赢呢?”
    每天一道博弈论之“牛的数字游戏”
    每天一道博弈论之“E&D”
    每天一道博弈论之“巴什博弈”
  • 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12227385.html
Copyright © 2020-2023  润新知