直奔主题
property
property在python中有2中使用property方法:
1.@property @属性名称.setter @属性名称.deleter
2.使用property(fget, fset, fdel, doc)指定
1.使用装饰器@property
要求:(1)所用的类为新式类,在python3版本以上默认为新式类,或者是是直接或间接继承object的类
(2)定义的函数名称必须要是名称名(如属性名是name,那函数名称就为name,不能为其他的。详情看例子)
class Demo(object): def __init__(self): print("这是构造函数") self._name = None @property def name(self): return self._name #这是属性get的方法 @name.setter def name(self, value):#这是属性set的方法 self._name = value @name.deleter def name(self): print("this is the method of delete") self._name = None if __name__ == "__main__": testDemo = Demo() print(testDemo.name) testDemo.name = "name" print(testDemo.name) del testDemo.name
以下是结果:
#======以下是结果======== 这是构造函数 None name this is the method of delete
2.使用property()方法
要求:(1)所用的类为新式类,在python3版本以上默认为新式类,或者是是直接或间接继承object的类
class Demo2(object): def __init__(self): print("这是构造函数") self._value = None def getValue(self):#这是属性value的get方法 print("getting the value of property") return self._value def setValue(self, value):#这是属性value的set方法 print("setting the value of property") self._value = value def delValue(self):#这是属性value删除方法 print("this is the method of delete") self._value = None value = property(fget=getValue, fset=setValue, fdel=delValue, doc="this is a message about the property of value") if __name__ == "__main__": testDemo = Demo2() print(testDemo.value) testDemo.value = "name" print("print the value of property:",testDemo.value) del testDemo.value
以下是结果:
#======以下是结果======== 这是构造函数 getting the value of property None setting the value of property getting the value of property ('print the value of property:', 'name') this is the method of delete
getter和setter
getter和setter 是在对象上动态的增加属性
if __name__ == "__main__": testDemo = Demo2() print([n for n in dir(testDemo) if n[0] is not "_"]) setattr(testDemo, "newMethod", "hellworld") print([n for n in dir(testDemo) if n[0] is not "_"]) value = getattr(testDemo, "newMethod") print(value) #使用getattr获取一个不存在的属性,如果属性不存在,则返回一个默认的值 value = getattr(testDemo, "yoyo", "the value is not exist!") print(value)
以下是结果:
#======以下是结果======== 这是构造函数 ['delValue', 'getValue', 'setValue', 'value'] ['delValue', 'getValue', 'newMethod', 'setValue', 'value'] hellworld the value is not exist!