Python 使用特性对属性进行访问

在写python类的时候,虽然可以通过“实例名.变量名”的方式对实例中的变量进行读取和赋值。但出于规范性等等原因,我们最好还是写getter和setter,不过这样的话在读取变量和赋值时代码就显得有些臃肿,也不那么随心所欲了。那么有没有即保证数据规范性又直接简单访问数据的方式呢?有,使用property() 函数和@property修饰符。

# coding=utf-8

class Foo(object):
    def __init__(self,name):
        self.__name=name #self.__name自动变形为self._Foo__name私有属性
    @property  #read定义特性
    def name(self):
        return self.__name   
    
    @name.setter  #write 向特性附加setter方法实现写操作
    def sname(self,value):
        if not(isinstance(value,str)):
            raise TypeError("Must be a string!")
        self.__name=value
        
    @name.deleter #delete 向特性附加deleter方法实现删除操作
    def name(self): 
        del self.__name  
    
f=Foo("Guido")
n=f.name   #调用f.name()-get函数
#m=f.sname(2) ???先调用第一个特性函数,得到str,在进行()TypeError: 'str' object is not callable
f.sname="Monty"  #调用setter name(f,"Monty")函数
f._Foo__name=1 #仍可通过变形后的属性名称进行属性访问,并非真正“私有”
print(f.name)
#1
del f.name   #调用deleter name(f)函数
print(f.name)
#AttributeError: 'Foo' object has no attribute '_Foo__name'

猜你喜欢

转载自blog.csdn.net/lijil168/article/details/81836209