Python:__slots__()方法和@property方法
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方法相关推荐
- 初学者python笔记(类的装饰器、property方法、元类)
文章目录 上下文协议管理 类的装饰器基本原理 property方法的巧用 利用描述符自定制property property下的setter与deleter Python的元类 元类的概念 自定义元类 ...
- python construct 字符串_通过字符串变量在Python中设置和获取@property方法
目前我有一个通用函数,你可以传入一个属性名和一个类(它也适用于特定的对象实例,但我正在使用类),该函数将通过调用查找并操作该属性 getattr(model_class, model_attribut ...
- Python - @property 方法变属性
@property @property是内置的装饰器,与普通装饰器原理是一样的,只不过返回的不是函数,而是类对象. @property负责把一个方法变成属性进行调用,保证对参数进行必要的检查. 属性有 ...
- python类的内置方法_python面向对象之类中的内置方法
__setattr__,__delattr__,__getattr__,__getattribute__以及标准类型的二次加工 __setattr__,__delattr__,__getattr__的 ...
- 类属性、类方法;私有属性、公有属性;私有方法、公有方法;静态属性、静态方法;python的命名规范__xx__\__xx\_xx(自用笔记)
Ⅰ.类属性.类方法(类和实例都能调用类属性和类方法) 类是一个特殊的对象,Python 中 一切皆对象:class AAA: #定义的类属于 类对象obj1 = AAA() #属于 实例对象 除了封装 ...
- Python动态类和动态方法的创建和调用
借助于python的动态语言特性,很容易对对象进行添加方法或者属性,这也是python的灵活之一. 动态生成类的属性及其方法 在某些情况可能要根据不同的参数来动态生成不同的实例方法.静态方法.类方法. ...
- python私人定制_手把手教你学python第十五讲(魔法方法续私人“定制”)
python无处不对象的深刻理解 前面写了这么多,我觉得有必要从一个大的层面,也就是OO来看问题的本质.只要你调用对象的语法是合乎python的习惯的,那就是可以的,我们以前从来没有像下面这么写过,对 ...
- python neo4j_在Python中使用Neo4j的方法
Neo4j是面向对象基于Java的 ,被设计为一个建立在Java之上.可以直接嵌入应用的数据存储.此后,其他语言和平台的支持被引入,Neo4j社区获得持续增长,获得了越来越多的技术支持者.目前已支持. ...
- Python世界里的魔术方法(一)
序言 传说中,Python对象天生具有一些神奇的方法,它们具有一些魔力,因此它们总被双下划线所包围着.这些方法统称为魔术方法.在特定的操作下,这些魔术方法会被自动调用,并且表现出许多神奇的现象. 它们 ...
最新文章
- 用ASP.NET上传大文件
- matlab示波器模拟,声卡虚拟示波器-使用matlab DAQ工具箱中API实现
- 安装mysql为什么下载了很多_mysql下载与安装过程
- 通俗易懂讲解JavaScript深拷贝和浅拷贝
- web公选课第三节2020.5.18
- Jerry Wang 2014年在SAP社区CRM板块的积分曾经一直占据第一
- [html] 跨域通信有哪些方式?
- mysql聚集索引 myisam_一句话说清聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM
- 编程语言对比 标准io
- 随想录(产品-工程开发-算法)
- 一点一点学习Ubuntu
- 说明assert()的作用:assert()是一个调试程序时经常使用的宏,在程序执行时计算括号内的表达式,如果表达式为假,程序报告错误,并终止执行;若表达式为真,则继续执行后面的语句。
- glide 设置宽高_Glide加载ImageView显示不全的问题(宽高比一致,以及fitxy/centerCrop)...
- wechat微信小程序 :对应的服务器证书无效
- 深圳一普通中学老师工资单曝光,秒杀程序员,网友:酸了酸了
- 2021-2027全球及中国群集机器人行业研究及十四五规划分析报告
- controll层跳转页面_Spring mvc框架 controller间跳转 ,重定向 ,传参
- HGOI11.1集训题解
- 白岩松:平静才是真正的奢侈品。
- 怎样选择比较靠谱的数据分析培训机构?