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. 用ASP.NET上传大文件
  2. matlab示波器模拟,声卡虚拟示波器-使用matlab DAQ工具箱中API实现
  3. 安装mysql为什么下载了很多_mysql下载与安装过程
  4. 通俗易懂讲解JavaScript深拷贝和浅拷贝
  5. web公选课第三节2020.5.18
  6. Jerry Wang 2014年在SAP社区CRM板块的积分曾经一直占据第一
  7. [html] 跨域通信有哪些方式?
  8. mysql聚集索引 myisam_一句话说清聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM
  9. 编程语言对比 标准io
  10. 随想录(产品-工程开发-算法)
  11. 一点一点学习Ubuntu
  12. 说明assert()的作用:assert()是一个调试程序时经常使用的宏,在程序执行时计算括号内的表达式,如果表达式为假,程序报告错误,并终止执行;若表达式为真,则继续执行后面的语句。
  13. glide 设置宽高_Glide加载ImageView显示不全的问题(宽高比一致,以及fitxy/centerCrop)...
  14. wechat微信小程序 :对应的服务器证书无效
  15. 深圳一普通中学老师工资单曝光,秒杀程序员,网友:酸了酸了
  16. 2021-2027全球及中国群集机器人行业研究及十四五规划分析报告
  17. controll层跳转页面_Spring mvc框架 controller间跳转 ,重定向 ,传参
  18. HGOI11.1集训题解
  19. 白岩松:平静才是真正的奢侈品。
  20. 怎样选择比较靠谱的数据分析培训机构?

热门文章

  1. [Linux]控制语句If case
  2. Xfire方式开发和解析webservice
  3. 乌龟的故事,很精彩滴哟
  4. 怎么看有没有安装libevent_家里有没有必要安装前置净水器?先听听师傅是怎么说的...
  5. android 等待圈_Android ProgressDialog 转圈圈-阿里云开发者社区
  6. 【转载】BTEs业务交易事件初识
  7. 【转】采购订单长文本增强
  8. 卡号身份证过期的影响
  9. SAP KKBC_ORD报表中Plan和Target的区别
  10. 如何查看长文本的标识和对象(读长文本)。