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@propertydef  grade(self):                    return self._score*2

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

Python:__slots__()方法和@property方法相关推荐

  1. 初学者python笔记(类的装饰器、property方法、元类)

    文章目录 上下文协议管理 类的装饰器基本原理 property方法的巧用 利用描述符自定制property property下的setter与deleter Python的元类 元类的概念 自定义元类 ...

  2. python construct 字符串_通过字符串变量在Python中设置和获取@property方法

    目前我有一个通用函数,你可以传入一个属性名和一个类(它也适用于特定的对象实例,但我正在使用类),该函数将通过调用查找并操作该属性 getattr(model_class, model_attribut ...

  3. Python - @property 方法变属性

    @property @property是内置的装饰器,与普通装饰器原理是一样的,只不过返回的不是函数,而是类对象. @property负责把一个方法变成属性进行调用,保证对参数进行必要的检查. 属性有 ...

  4. python类的内置方法_python面向对象之类中的内置方法

    __setattr__,__delattr__,__getattr__,__getattribute__以及标准类型的二次加工 __setattr__,__delattr__,__getattr__的 ...

  5. 类属性、类方法;私有属性、公有属性;私有方法、公有方法;静态属性、静态方法;python的命名规范__xx__\__xx\_xx(自用笔记)

    Ⅰ.类属性.类方法(类和实例都能调用类属性和类方法) 类是一个特殊的对象,Python 中 一切皆对象:class AAA: #定义的类属于 类对象obj1 = AAA() #属于 实例对象 除了封装 ...

  6. Python动态类和动态方法的创建和调用

    借助于python的动态语言特性,很容易对对象进行添加方法或者属性,这也是python的灵活之一. 动态生成类的属性及其方法 在某些情况可能要根据不同的参数来动态生成不同的实例方法.静态方法.类方法. ...

  7. python私人定制_手把手教你学python第十五讲(魔法方法续私人“定制”)

    python无处不对象的深刻理解 前面写了这么多,我觉得有必要从一个大的层面,也就是OO来看问题的本质.只要你调用对象的语法是合乎python的习惯的,那就是可以的,我们以前从来没有像下面这么写过,对 ...

  8. python neo4j_在Python中使用Neo4j的方法

    Neo4j是面向对象基于Java的 ,被设计为一个建立在Java之上.可以直接嵌入应用的数据存储.此后,其他语言和平台的支持被引入,Neo4j社区获得持续增长,获得了越来越多的技术支持者.目前已支持. ...

  9. Python世界里的魔术方法(一)

    序言 传说中,Python对象天生具有一些神奇的方法,它们具有一些魔力,因此它们总被双下划线所包围着.这些方法统称为魔术方法.在特定的操作下,这些魔术方法会被自动调用,并且表现出许多神奇的现象. 它们 ...

最新文章

  1. TensorFlow 深度学习笔记 从线性分类器到深度神经网络
  2. 抽象工厂模式-与-工厂方法模式区别
  3. day15-pymysql模块的使用
  4. RedisTemplate实现事物问题剖析和解决
  5. Oracle定时器(Job)各时间段写法汇总
  6. db2有主键时默认hash分区_不允许设置db2主键问题的解决
  7. PyTorch 1.0 中文官方教程:使用 PyTorch C++ 前端
  8. 吴恩达神经网络和深度学习-学习笔记-43-Bounding box 预测 + YOLO算法
  9. 深入 JavaScript(6) - 一静一动
  10. ubuntu下cpu以最大频率运行、查看CPU主频几种方法
  11. Oracle 9.2.0.4的一个简单安装脚本(含安装前补丁p3006854)
  12. 抄答案就是了,两套详细的设计方案,解决头疼的支付掉单问题
  13. yuv420p 详解_YUV格式详解,图文详解YUV420数据格式
  14. 洛谷P1005 [NOIP2007 提高组] 矩阵取数游戏
  15. python哪个字体好看_Python实现对比不同字体中的同一字符的显示效果
  16. 小米校招产品作业解读:设计一款日记APP
  17. 基本面分析 ≠ 基本面量化投资?
  18. 华为2285v2服务器修改SN,华为RH2285 V2服务器升级bios
  19. Win10连接上了wifi,但显示Internet无网络访问权限的解决方法
  20. ThreeJS绘制流动的虚线效果

热门文章

  1. Python中super()和__init__()方法
  2. bzoj4525[Usaco2016 Jan]Angry Cows
  3. session过期跳转登录页面
  4. 用MDT 2012为企业部署windows 7(十一)--抓取标准模板机镜像
  5. AUP2敏捷统一过程之一:序言及降低过程的总体拥有成本
  6. 挖掘协同的力量 大OA前景广阔
  7. 一个实现生产和消费的例子(并且使用了接口和反射技术,动态调用方法)小框架...
  8. 【学习笔记】新基建/新动能——部分学习笔记
  9. 【转】Postman安装与使用
  10. 【Smartform】开发中报SSFCOMPOSER154错误原因分析