Python:

    科技2023-10-12  103

    1、__slots__

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

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

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

    然后我们尝试添加属性:

    ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' >>> 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方法对属性进行赋值:

    ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' 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()函数就只具备读属性,不可以进行赋值。

    Processed: 0.011, SQL: 8