@property装饰器就是负责把一个方法变成属性调用的
class property(object):
def deleter(self, *args, **kwargs):
""" Descriptor to change the deleter on a property. """
pass
def getter(self, *args, **kwargs):
""" Descriptor to change the getter on a property. """
pass
def setter(self, *args, **kwargs):
""" Descriptor to change the setter on a property. """
pass
def __delete__(self, *args, **kwargs):
""" Delete an attribute of instance. """
pass
def __getattribute__(self, *args, **kwargs):
""" Return getattr(self, name). """
pass
def __get__(self, *args, **kwargs):
""" Return an attribute of instance, which is of type owner. """
pass
def __init__(self, fget=None, fset=None, fdel=None, doc=None):
"""
fget is a function to be used for getting an attribute value, and likewise
fset is a function for setting, and fdel a function for del'ing, an attribute.
"""
pass
@staticmethod
def __new__(*args, **kwargs): # real signature unknown
""" Create and return a new object. See help(type) for accurate signature. """
pass
def __set__(self, *args, **kwargs):
""" Set an attribute of instance to value. """
pass
fdel = property(lambda self: object(), lambda self, v: None, lambda self: None)
fget = property(lambda self: object(), lambda self, v: None, lambda self: None)
fset = property(lambda self: object(), lambda self, v: None, lambda self: None)
__isabstractmethod__ = property(lambda self: object(), lambda self, v: None, lambda self: None)
当你需要对类的一个属性可读时,可以直接使用 @property
,而可写就必须要可读才行
class sum(object):
@property
def a(self):
# 请不要将参数定义的与函数名相同 否则会造成一直调用函数的窘境
return self._a
# 函数 a 已经通过上面的方法定义为一个property对象
@a.setter
def a(self, value):
self._a = value
@property
def b(self):
return self._b
@b.setter
def b(self, value):
self._b = value
可能你有一个疑惑那就是,我如果不对 self._a
直接返回,而是加一个值对其进行赋值,是不是可以直接改值