property装饰器

# 需要了解的property的用法
class People:
    def __init__(self,name):
        self.__name=name

    @property
    def name(self):
        return '<name:%s>' %self.__name

    @name.setter
    def name(self,new_name):
        if type(new_name) is not str:
            print('名字必须是str类型')
            return
        self.__name=new_name

    @name.deleter
    def name(self):
        del self.__name

obj=People('egon')  #查看 name 
print(obj.name)

obj.name='ok' #修改 name 属性
print(obj.name)

del obj.name    #删除 name 属性
print(obj.__dict__)

结果:

<name:egon>
<name:ok>
{}

 

关于property装饰器的使用顺序:

class People:
    def __init__(self,name):
        self.__name=name

    def xxx_name(self):        #查看
        return '<name:%s>' %self.__name

    def yyy_name(self,new_name):    #修改
        if type(new_name) is not str:
            print('名字必须是str类型')
            return
        self.__name=new_name

    def zzz_name(self):        #删除
        del self.__name

    name=property(xxx_name,yyy_name,zzz_name)  #格式命名,固定的顺序(查->改->删)

obj=People('egon')
print(obj.name)

# obj.name=123
# print(obj.name)

del obj.name
print(obj.__dict__)

 

如果要在类外面调用类中的隐藏属性就可以使用property

 

posted @ 2018-10-24 17:23  萤huo虫  阅读(129)  评论(0编辑  收藏  举报