英文文档
- class (fget=None, fset=None, fdel=None, doc=None)
Return a property attribute.
fget is a function for getting an attribute value. fset is a function
for setting an attribute value. fdel is a function for deleting an attribute
value. And doc creates a docstring for the attribute.
property()
class property(fget=None, fset=None, fdel=None, doc=None) 标示属性的装饰器。
1、property是一个类,其作用是用来包装类的属性,这个属性可以根据实际需要,控制是否可读(设置fget参数)、可写(设置fset参数)、可删除(设置fdel参数)。
- x = property(getx, setx, delx, "I'm the 'x' property.")
复制代码- [/code][code]>>> c.x = 'x had changed' # 调用 setx
复制代码- [/code][code]>>> del c.x # 调用 delx
复制代码- Traceback (most recent call last):
复制代码- AttributeError: 'C' object has no attribute '_x'
复制代码 2. 参数doc表示的是属性的说明,如果没有指定,将从fget参数指定的方法中读取
- >>> print(1,2,3,'+','=?')
复制代码 3、sep和end参数必须是字符串;或者为None,为None时意味着将使用其默认值。
- Help on C in module __main__ object:
复制代码- [/code][code]class C(builtins.object)
复制代码- | Initialize self. See help(type(self)) for accurate signature.
复制代码- | ----------------------------------------------------------------------
复制代码- | Data descriptors defined here:
复制代码- | dictionary for instance variables (if defined)
复制代码- | list of weak references to the object (if defined)
复制代码- [/code][code]# 最后一行中 文档字符串 为I'm the 'x' property.
复制代码- [/code][code]>>> class C:
复制代码- """I'm the 'x' property. provide by getx"""
复制代码- x = property(getx, setx, delx)
复制代码- Help on class C in module __main__:
复制代码- [/code][code]class C(builtins.object)
复制代码- | Initialize self. See help(type(self)) for accurate signature.
复制代码- | I'm the 'x' property. provide by getx
复制代码- | ----------------------------------------------------------------------
复制代码- | Data descriptors defined here:
复制代码- | dictionary for instance variables (if defined)
复制代码- | list of weak references to the object (if defined)
复制代码- | I'm the 'x' property. provide by getx
复制代码- [/code][code]# 最后一行中 文档字符串 为 I'm the 'x' property. provide by getx
复制代码- [/code]3. property更优雅的做法是用作装饰器,装饰过的方法就可以以属性方式调用。同时将生成.setter和.deleter装饰器,用于指定可入方法,删除方法
- [list][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][/list][code]>>> class C:
复制代码- """I'm the 'x' property."""
复制代码- [/code][code]>>> c.x = 'x had changed' # 调用 setx
复制代码- [/code][code]>>> del c.x # 调用 delx
复制代码- Traceback (most recent call last):
复制代码- AttributeError: 'C' object has no attribute '_x'
复制代码 4. 不直接使用字段,而使用属性,主要因为可以控制外部对类字段的恶意修改和删除,而且可以再设置属性值的时候进行适当的验证。
- """i'm the 'name' property."""
复制代码- raise RuntimeError('name can not be None')
复制代码- [/code][code]>>> c.name # 访问属性
复制代码- >>> c.name = None # 设置属性时进行验证
复制代码- Traceback (most recent call last):
复制代码- File "", line 11, in name
复制代码- raise RuntimeError('name can not be None')
复制代码- RuntimeError: name can not be None
复制代码- [/code][code]>>> c.name = 'Kim' # 设置属性
复制代码- [/code][code]>>> del c.name # 删除属性,不提供deleter则不能删除
复制代码- Traceback (most recent call last):
复制代码- AttributeError: can't delete attribute
复制代码 小结
希望通过上面的操作能帮助大家。如果你有什么好的意见,建议,或者有不同的看法,希望你留言和我进行交流、讨论。
欢迎关注微信公众号,访问更多精彩:数据之魅。
如需转载,请联系授权,谢谢合作。
|
|