美文网首页
Python 扩展property属性

Python 扩展property属性

作者: 陈忠俊 | 来源:发表于2019-09-28 15:14 被阅读0次

    我们都知道property是将类的方法变成属性的装饰器

    >>> class Circle:
    ...     def __init__(self, radius):
    ...         self.radius = radius
    ...     @property
    ...     def perimeter(self):
    ...         return 2 * self.radius * 3.14
    ...     @property
    ...     def area(self):
    ...         return self.radius**2 * 3.14
    ... 
    >>> test = Circle(2)
    >>> test.perimeter
    12.56
    >>> test.area
    12.56
    

    有时候我们想隐藏一些内部的属性,不让外部可以调用和更改。我们创建了以下类方法

    >>> class Test:
    ...     def __init__(self, name):
    ...         self.__name = name
    ...     @property
    ...     def name(self):
    ...         return self.__name
    ... 
    >>> aa = Test('eclipse')
    >>> aa.name
    'eclipse'
    >>> aa.name = '123'
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: can't set attribute
    

    此时,我们无法在外部修复其属性,这时候我们需要扩展propery方法,如下:

    >>> class Test:
    ...     def __init__(self, name):
    ...         self.__name = name
    ...     @property
    ...     def name(self):
    ...         return self.__name
    ...     @name.setter
    ...     def name(self, new_name):
    ...         self.__name = new_name
    ... 
    >>> bb = Test('eclipse')
    >>> bb.name
    'eclipse'
    >>> bb.name = 'Python'
    >>> bb.name
    'Python'
    >>> 
    

    我们还可以扩展propertydeleter方法,用于删除该属性值。用的不多,这里不说了。

    相关文章

      网友评论

          本文标题:Python 扩展property属性

          本文链接:https://www.haomeiwen.com/subject/auzsyctx.html