__slots__ 和 @property】的更多相关文章

__slots__属性可以设置 允许被设置的属性 class Student: __slots__ = ("name", "age") >>> s = Student() >>> s.age = >>> s.name = "Zoro" >>> s.score = Traceback (most recent call last): File , in <module&g…
__slots__ @property 多重继承 定制类 枚举类 元类 [使用__slots__] 1.动态语言的一个特点就是允许给实例绑定任意的方法和变量,而静态语言(例如Java)必须事先将属性方法写进类里. 给实例绑定变量: >>> class Student: ... pass ... >>> s = Student() >>> s.name = 'Lily' >>> s.name 'Lily' 给实例绑定方法需要借助type…
动态非常灵活, 创建一个class后, 给实例绑定一个属性: >>> class Bird: ... pass ... >>> s = Bird() >>> s.name = 'bob' >>> s.name bob 也可以给实例绑定一个方法, 但是这对另一个实例是无效的: >>> def age(self,age): ... self.age = age ... >>> from types im…
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第11篇文章,我们来聊聊面向对象的一些进阶使用. __slots__ 如果你看过github当中一些大牛的代码,你会发现很多大牛经常在类的顶部加上__slots__关键字.如果你足够好奇,你可能会试着把这个关键字去掉再运行试试,你会发现去掉了之后什么也没有发生,一切依然运行得很好. 那么这个__slots__关键字究竟是做什么的呢? 它主要有两个功能,我们先来说第一个功能,就是限制用户的使用. 我们都知道Pyth…
何为定制类? Python的class允许定义许多特殊方法,可以让我们非常方便地生成特定的类.在类中应用或者重写python的特殊方法,得到的类,就是定制类. 大家都知道print的用法.见下面例子 >>> lst = [2,3,4] >>> print lst [2, 3, 4] >>> class Animal(object): pass >>> a = Animal() >>> print a <__ma…
多重继承 Python里允许多重继承,即一个类可以同时继承多个类: class Mammal(Animal): pass class Runnable(object): def run(self): print('Running...') class Dog(Mammal, Runnable): pass 这样,Dog同时拥有Mammal.Runnable的属性和方法. __slots__限制实例的属性 由于类的实例可以动态绑定新的属性,有时候我们不希望这样,可以通过__slots__进行限制:…
这次真的是最后一次了!第三次滚Python的基础.走了太多弯路.认真一点!菜鸟! 教程 转义字符 \ 可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\ 用'''...'''的格式表示多行内容 用全部大写的变量名表示常量(编写习惯) ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节. 在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好.如…
使用@property添加属性和自定义属性 __slots__和property 方法和属性的动态绑定 使用__slots__限定class实例能添加的属性 __slots__仅对当前类实例起作用,对继承的子类是不起作用的. 直接暴露属性的局限性 使用get/set方法 利用@property简化get/set方法 利用@property实现只读属性 装饰器与property实现(学有余力的同学可以研究一下) 特殊方法与类的定制 类的默认行为与定制 常见特殊方法 枚举类 枚举 vs 变量 @un…
一.__slots__和property 1.__slots__魔术函数动态的添加方法和属性 2.直接暴露属性的局限性 3.使用get/set方法 4.利用@property简化get/set方法 5.利用@property实现只读属性 6.装饰器与property实现 # import traceback # from types import MethodType # # class MyClass(object): # # pass # #在做新的类的时候,限制动态添加的属性,这个时候需要…
这几天学的不多,只是看了一下相关的视频.最近看的部分比较难,装饰器没有搞懂,__slots__和property也不太明白(这两个知识点是在公交车上看的视频,因为1.5倍速度放的视频,看得快,不太明白)所以需要进一步巩固.待复习巩固了把相关的学习小结补充上来. 今晚还去健身房锻炼了,特别累,真是在工作的同时要兼顾身体呢,但是锻炼了就没法看书学习了,业余时间就那么多,真是很难平衡啊,羡慕那些年轻人,有那么多时间精力去做事,如果我从20出头就开始天天学习,并坚持一个方向就好了,现在后悔还来不来得及呢…
一.类与类的关系 关注公众号"轻松学编程"了解更多. is-a 继承 继承是指一个类(称为子类.子接口)继承另外一个类(称为父类.父接口)的功能, 并可以增加它自己的新功能的能力. has-a 关联/聚合/合成 关联体现的是两个类之间语义级别的一种强依赖关系,比如我和我的朋友, 这种关系比依赖更强.不存在依赖关系的偶然性.关系也不是临时性的, 一般是长期性的,而且双方的关系一般是平等的.关联可以是单向.双向的. 表现在代码层面,为被关联类B以类的属性形式出现在关联类A中, 也可能是关联…
1.使用 __slots__    给实例绑定方法, >>> def set_age(self, age): # 定义一个函数作为实例方法 ... self.age = age ... >>>from types import MethodType >>>s.set_age=MethodType(set_age,s) >>>s.set_age(25) >>>s.age 25 为了给所有的实例都绑定方法,可以给类绑定方…
一.使用__slots__ 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: class Student(object): pass 然后,尝试给实例绑定一个属性: >>> s = Student() >>> s.name = 'Michael' # 动态给实例绑定一个属性 >>> print(s.name) Michael 还可以尝试给实例绑定一个方法…
为什么有"slots"属性? 默认情况下,python对象队象的每个实例(instance)都会有一个字典来存储该实例的属性,这样做的好处在于运行时期每个对象可以任意设置新的属性.而相对应的坏处是,当创建成百上千个这样的实例的时候回很浪费内存.所以引入__slots__,用来指定实例只拥有固定的属性,因此python会给每个实例对象分配固定的内存空间,从而减少内存消耗.而且使用__slots__可以加快属性的访问. 用法 __slots__可以被设置成属性名称的字符串,可遍历的对象或者…
一:最基本的属性操作 class Generic: pass g= Generic() >>> g.attribute= "value" #创建属性并赋值 >>> g.attribute 'value' >>> g.unset Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeEr…
优点: 1. __slots__ 能够减小内存的占用,限制对象只能有这几个属性,再加属性会报错 . 副作用: 1. 设置了__slots__之后,实例对象就没有__dict__了 2. __slots__不能限制子类 详细代码解读: 限制对象只能有这几个属性,再加属性会报错 1. 设置了__slots__之后,实例对象就没有__dict__了 2. __slots__不能限制子类 class BaseResponse(object): __slots__ = ('code', 'data', '…
描述符1.描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()这三个内置方法中的一个,描述符也被称为描述符协议(1):__get__()调用一个属性时触发(2):__set__()为一个属性赋值时触发(3):__delete__()采用del删除属性时触发2.描述符的作用是用来代理另外一个类的属性的(必须把描述符定义成这个类的属性,不能定义到构造函数) class Foo: #定义新式类 def __get__(sel…
一.多继承 案例1:小孩继承自爸爸,妈妈.在程序入口模块再创建实例调用执行 #father模块 class Father(object): def __init__(self,money): self.money = money def play(self): print("play") def eat(self): print("eat") #mother模块 class Mother(object): def __init__(self,faceValue):…
其实也是无意之中又看到这个东西,这次索性再记一下,免得下次忘记又再看一遍,往复循环浪费了太多时间. __slots__其实我做项目这么久还没有主动使用过.下面reference有提到这么一句话 Warning: Don’t prematurely optimize and use this everywhere! It’s not great for code maintenance, and it really only saves you when you have thousands of…
使用@property 阅读: 20616 在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 这显然不合逻辑.为了限制score的范围,可以通过一个set_score()方法来设置成绩,再通过一个get_score()来获取成绩,这样,在set_score()方法里,就可以检查参数: class Student(object): def get_score(self): return…
1.给实例化的对象添加新的属性 看下面一段代码,然后给实例化的对象s添加或者修改属性 class Student(object): name='china' s = Student() s1=Student() s.name = 'Charles' s.age=20 print s.name print s1.name print s.age 结果: Charles china 20 可以看到:实例的属性可以被修改或者添加 2.使用__slots__限制只有指定的属性才可以被实例添加 将可以被实…
起源:项目过程中需要研究youtube_dl这个开源组件,翻阅其中对类的使用,对比c#及Delphi中实现,感觉Python属性机制挺有意思.区别与高级编程语言之单一入口,在类之属性这一方面,它随意的太多,以致于习惯了高级语言的严谨,对如此随意心里倒是有些不安.也难怪,因为其数据类型弱限制性,往往一个函数返回了一个结果,追溯此返回值类型,有时需要费上许多工夫!我不是随意的人,但随意起来我还真不是人,用在此处,颇为贴切:b 属性,是对事物某种特性的抽象,面向对象编程中一个重要概念:区别于字段,它通…
1.描述符 #!/usr/bin/python env # coding=utf-8 # 数据描述符__get__ __set__ __delete__ ''' 描述符总结 描述符是可以实现大部分python类特性中的底层魔法,包括@classmethod,@staticmethd,@property甚至是__slots__属性 描述符是很多高级库和框架的重要工具之一,描述符通常是使用到装饰器或者元类的大型框架中的一个组件 注意事项: 一 描述符本身应该定义成新式类,被代理的类也应该是新式类 二…
一.再看property                                                                          一个静态属性property本质就是实现了get,set,delete三种方法 class Foo: @property def AAA(self): print('get的时候运行我啊') @AAA.setter def AAA(self,value): print('set的时候运行我啊') @AAA.deleter de…
一.类的基础知识 python 一切皆为对象. 我们以前的str,list,int 都是对象. 1.1 类的定义 与 调用 class 关键字用来定义类,注意类名首字母大写. 类的调用,先实例化一个类,叫做对象或实例.使用这个实例调用其中的方法. 其实在之前我们一直在使用面向对象,str本身就是一个类. s = ‘abc’  -> s = str(abc)  # 看源码对= 进行了运算符的重载,生成一个对象.就是我们类的调用. s.upper()   调用里面的方法. class Foo: de…
面向对象设计中最基础的3个概念:数据封装.继承和多态 动态给class增加功能 正常情况下,当定义了一个class,然后创建了一个class的实例后,可以在程序运行的过程中给该实例绑定任何属性和方法,这就是动态语言的灵活性. (1)给一个实例绑定的方法,对另一个实例是不起作用的. (2)为了给所有实例都绑定方法,可以给class绑定方法. Student.set_age=set_age 注:是set_age,而不是set_age(  ) (3) 给class绑定方法后,所有实例均可调用. #定义…
python是动态语言,可以随时随地给实例对象添加属性和方法,但是我们想限制属性的名字,可以使用__slots__特殊变量来限制 使用__slots__要注意,__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的.只有当前类中才有作用 @property 把方法变成属性一样方便的调用 -------------------多重继承 通过多重继承,一个子类就可以同时获得多个父类的所有功能. ------------------定制类() 增加一个__str__方法 直接输入c…
一.问题来源 一直没有搞清楚NSString.NSArray.NSDictionary--属性描述关键字copy和strong的区别,看别人的项目中属性定义有的用copy,有的用strong.自己在开发中也是没有认真的去研究,至于使用copy还是用strong完全是根据心情随性而为,也一直没有出什么问题.可苹果竟然分了两个关键字,就肯定有其用意,为了提高自己还是要仔细的搞清楚其中之差别!好了,废话说完进入正题. 二.对象属性描述copy与strong的区别 直接上代码: ``` @propert…
最近在研读一本巨著<JavaScript忍者秘籍>,里面有一篇文章提到了这3个概念. 书中的源码可以在此下载.我将源码放到了线上,如果不想下载,可以直接访问在线网址,修改页面名就能访问到相应示例代码. 一.DOM特性和DOM属性 attribute(特性),是我们赋予某个事物的特质或对象,attribute是HTML标签上的特性,它的值只能够是字符串 property(属性),是早已存在的不需要外界赋予的特质,property是DOM中的属性,是JavaScript里的对象 在访问元素特性值时…
最近在使用maven,项目测试的时候出现了这么一个错.-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HO  网上找到了一个解决办法. 1.添加M2_HOME的环境变量 2.Preference->Java->Installed JREs->Edit 选择一个jdk 添加    -Dmaven.multiModuleProjectDirectory=$M2_HOME…