• Python学习笔记捌——面向对象高级编程


    __slots__特殊变量的使用:

    由于Python是动态语言,允许先编写类,然后在创建实例的时候添加属性或者方法;而__slots__特殊变量就是,限制往类里添加属性的;

    在创建类的时候,使用__slots__ =('name','age'),就是在创建实例时候,只允许添加绑定name和age两个属性;注意!__slots__只对当前类有效,不会作用于子类;

    @property装饰器:为了实现数据的封装,不把属性暴露在外面,所以如果想访问实例内部属性的话,就需要使用get和set方法,但是这样不方便,于是就出现了@property装饰器,他的作用是把函数变成属性,来访问调用。

    >>> class Student(object):
    ...    def get_score(self):
    ...      return self._score
    ...    def set_score(self,value):
    ...      if not isinstance(value,int):
    ...        raise ValueError('value must be integer')
    ...      if value < 0 or value > 100:
    ...        raise ValueError('value must between 0 and 100')
    ...      self._score = value
    ...
    >>> s=Student()
    >>> s.set_score(60)
    >>> s.score
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    AttributeError: 'Student' object has no attribute 'score'
    >>> s.get_score()
    60
    >>> s.set_score(120)
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "<stdin>", line 8, in set_score
    ValueError: value must between 0 and 100
     注!这种情况就是没有装饰器的保护数据不暴露的方法。但是有了装饰器,可以将方法变成属性来调用,就方便多了。

    >>> class Student2(object):
    ...    @property
    ...    def score(self):
    ...       return self._score
    ...    @score.setter
    ...    def score(self,value):
    ...      if not isinstance(value,int):
    ...        raise verror('score must be integer')
    ...      if value<0 or value>100:
    ...        raise verror('score must between 0~100')
    ...      self._score=value
    ...
    >>> s=Student
    >>> s=Student()
    >>> s.score=99
    >>> s.score

    99

  • 相关阅读:
    机器学习实战1:朴素贝叶斯模型:文本分类+垃圾邮件分类
    Hadoop实战1:MapR在ubuntu集群中的安装
    建站、开发工具,持续更新。。。
    Mysql多表联合更新、删除
    List的深度copy和浅度拷贝
    HashMap和List遍历方法总结及如何遍历删除元素
    for循环的两种写法哪个快
    MySQL的隐式类型转换整理总结
    Java BigDecimal类的使用和注意事项
    MySQL DECIMAL数据类型
  • 原文地址:https://www.cnblogs.com/ooOO00/p/5452092.html
Copyright © 2020-2023  润新知