zoukankan      html  css  js  c++  java
  • Python:__slots__()方法和@property方法

    #最近在根据廖雪峰老师的python学习教程学习,以下时学习过程中做的一些学习总结

    1、__slots__

      1、python作为一个动态语言,可以在创建一个class类后,给类进行绑定属性和方法。但是当我们想要限制实例的属性和方法时怎么办?这个时候就可以用到__slots__()方法。

      无图无真相,直接上代码:

    class Student(object):
        __slots__ = ('name','age')

      然后我们尝试添加属性:

    >>> a = Student()
    >>> a.name = 'bob'
    >>> a.name
    'bob'
    >>> a.age = 25
    >>> a.age
    25
    >>> a.score = 89
    Traceback (most recent call last):
      File "<pyshell#5>", line 1, in <module>
        a.score = 89
    AttributeError: 'Student' object has no attribute 'score'

      可以看出当我们设置(‘name’,'age')属性的值的时候可以正常显示,当时当我们设置score属性出现了报错,这是因为__slots__限制了实例的属性。

      2、__slots__方法限制属性,但是对继承的子类无效

    class Demo(Student):
        pass

      添加属性:

    >>>g = Demo()
    >>>g.score = 99
    >>>g.score
    99

      使用__slots__时要注意,该方法只对当前类有效,除非在子类中也定义__slots__方法。

    2、@property

      @property时python内置的一个装饰器,负责把一个方法变成属性调用。

      @property的实现较为复杂,他首先通过@property把一个getter方法变成一个属性,然后在定义一个@xxx.setter方法对属性进行赋值:

     class Student(object):
      @property          #定义读属性
        def score(self):
            return self._score
        @score_setter        #定义写的属性
        def score(self,value):
            self._score=value
        @property
        def  grade(self):                    
            return self._score*2            

      从上面例子可以看出,@property也可以只定义getter方法,如上grade()函数就只具备读属性,不可以进行赋值。

      

      

  • 相关阅读:
    FJ省队集训DAY3 T1
    FJ省队集训DAY2 T2
    FJ省队集训DAY2 T1
    FJ省队集训DAY1 T1
    POJ 1225 Substrings
    BZOJ 2732 射箭
    Light OJ 1314 Names for Babies
    SPOJ220 Relevant Phrases of Annihilation
    POJ3683 Falsita
    ES6 常用语法
  • 原文地址:https://www.cnblogs.com/twlr/p/12299830.html
Copyright © 2011-2022 走看看