prop = 42 ... >>> C.prop 42 你甚至可以设置和删除对象的属性: >>> C.prop = 84 >>> C.prop 84 >>> del C.prop 将字典的键值对和对象及其属性比较...这里使用了 getattr 函数,它能接受一个字符串为属性,并设置属性值。 setattr 和 delattr 也都有类似的功能:它们接受字符串的属性名称,并相应地设置或删除属性值。...,独立于任何类或对象属性。...坦率地说,描述符是一个非常高级的话题,如果在这里试图涵盖它,没有任何用处,因为它只是和已告知的内容有所关联。...:像列表一样有序和,但有一个关键区别: 它们是不可变的,这意味着一旦创建了元组对象,就不能添加或删除其中的成员。
p248: 嵌套函数、闭包和 decorator co_cellvars: 通常是一个tuple,保存嵌套的作用域内使用的变量名集合; co_freevars: 通常是一个tuple,保存使用了的外层作用域中的变量名集合...inner_func 可以认为是 get_func 的局部变量,如图2 中 inner_func 对应的 PyFunctionObject 对象的 func_closure 指向 tuple。...在inner_func 调用过 程中,tuple 中包含的一个个cell 对象就被放到 f_localplus 中相应的位置,当引用外层作用域符号时,一定是先到 f_localsplus 中的 free...所以当我们无论通过 a.g 还是 A.g 访问,由于'g' 是位于 class 对象A 的 tp_dict 中的 descriptor,所有会调用其 __get__操作,直接返回 当时最开始与'g' 对应的那个...PyFunctionObject 对象,而不是一般成员函数返回的 PyMethodObject 对象,也就没有了绑定self 参数的过程,所以 'g' 访问不到 a = A(); a.
用()把元素括起来,用,逗号隔开 创建和访问元组 更新和删除元组 元组的相关操作符 元组创建: >>> tuple1 = (1,2,3,4,5,6,7,8) #使用()括起来,用...tuple2,原来的('张三','李四','王五')这个元组依然在存储区域内,只是没有变量引用它,一段时间以后原来的元组存储区域就会被python回收 元组跟数组不同,不能使用pop(),remove...()方法删除其中的元素,不过可以使用del删除整个元组(用法少,一般不会明显删除整个元组) >>> tuple2.remove('张三') Traceback (most recent call last...肯定不是,这是赋值操作,是对x,y,z分别赋值 所有的多对象的、逗号分隔的、没有明确用符号定义的这些集合默认的类型都是元组。...6.请写出以下情景中应该使用列表还是元组来保存数据: 1) 游戏中角色的属性:列表 2) 你的×××信息:元组 3) 论坛的会员:列表 4) 团队合作开发程序,传递给一个你并不了解具体实现的函数的参数
,或者位于该类型的父继承链上 。...)) True >>> isinstance((1, 2, 3), (list, tuple)) True dir()函数 如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的...True >>> getattr(obj, 'y') # 获取属性'y' 19 >>> obj.y # 获取属性'y' 19 如果试图获取不存在的属性,会抛出AttributeError的错误: >>>...与之对应的是__setitem__()方法,把对象视作list或dict来对集合赋值。最后,还有一个__delitem__()方法,用于删除某个元素。...的dict中,同时从类属性中删除该Field属性,否则,容易造成运行时错误(实例的属性会遮盖类的同名属性); 把表名保存到__table__中,这里简化为表名默认为类名。
一、元组的特点: 1、有序的集合 2、通过偏移来取数据 3、属于不可变的对象,不能在原地修改内容,没有排序,修改等操作。...> a=tuple(b) ###新生成了一个对象,表面上是修改成功了 >>> a (5, 2, 3) 思考:元组不能改变,那为什么有列表,还要有元组呢?..." return a #不会修改列表的值 a = [1,2,3] print "start-" print id(a) info(a) print a 二、集合:集合是没有顺序的概念。...内置方法set(),接收可迭代的对象,如果对象有__iter__ 属性,就是可以迭代的对象,如字符串、列表、元组 1、创建集合。...差集 & | - 7、set去重 列表内容元素重复 >>> b=set('abc') >>> b set(['a', 'c', 'b']) >>> b.add('python') #作为一个整体,添加单个对象到集合里
后来又发现了 web.py 的 Storage 对象,使这个函数越发好用起来。...self[key] 改成 self.get(k),从而避免在访问不存在的值时触发属性异常。...= ” and not isinstance(data.k, int): return error() 因为 Python 会把很多种如 len() 为零的对象的布尔值判断为 False,所以上面始终没有使用...补充,Storage 类的一个缺点是:他有 __dict__ 属性,但该属性永远为空 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
: 'set' object has no attribute 'count' 错误原因分析与解决方案: 错误信息显示当前对象并不具有一个叫做'***'的属性或方法,所以调用失败。...这种错误一般是因为记错了对象属性或方法,也可能是前面某段代码代码修改了变量x的类型,自己却忘记了。...遇到这种错误时,首先应使用type()函数确定当前位置的x是什么类型,然后可以在使用dir()确定该类型的对象是否具有'***'属性或方法。...(4)试图删除或修改不可变容器对象中的元素值 演示代码: >>> x = (1, 2, 3) >>> del x[1] Traceback (most recent call last): File...,因为作为Python程序员我们肯定知道元组和字符串是不可变的容易对象,是不允许修改其中元素值的,也不允许删除其中的元素。
先创建3种类型的对象: >>> a = Animal() >>> d = Dog() >>> h = Husky() 然后,判断: >>> isinstance(h, Husky) True 没有问题,...换句话说,isinstance()判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上。...使用dir() 如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list,比如,获得一个str对象的所有属性和方法: >>> dir('ABC') ['__add__'...True >>> getattr(obj, 'y') # 获取属性'y' 19 >>> obj.y # 获取属性'y' 19 如果试图获取不存在的属性,会抛出AttributeError的错误: >>>...AttributeError: 'MyObject' object has no attribute 'z' 可以传入一个default参数,如果属性不存在,就返回默认值: >>> getattr(obj
下划线没有语义含义,并且文字被解析,就像没有下划线一样。...例如:from m import * 不导入名称以下划线开头的对象。 #variable name having single leading underscore....引用 PEP-8: 约定使用 single_trailing_underline_: 以避免与 Python 关键字冲突 list=[1,2,3] t=(5,6,7) #Coverting tuple...双下划线 双下划线告诉 Python 解释器重写子类的属性名和方法名,以避免命名冲突。用类扩展名更改属性名称的解释器称为名称改写。 用 self....引用 PEP-8: __double_leading_and_trailing_underscore__:“ magic”对象或属性,位于用户控制的名称空间中。
与之对应的是__setitem__()方法,把对象视作list或dict来对集合赋值。最后,还有一个__delitem__()方法,用于删除某个元素。...总之,通过上面的方法,我们自己定义的类表现得和Python自带的list、tuple、dict没什么区别,这完全归功于动态语言的“鸭子类型”,不需要强制继承某个接口。...AttributeError: 'Student' object has no attribute 'score' 写一个__getattr__()方法,动态返回一个属性。...if attr=='age': return lambda: 25 只是调用方式要变为: >>> s.age() 25 只有在没有找到属性的情况下,才调用__getattr__,...要让class只响应特定的几个属性,我们就要按照约定,抛出AttributeError的错误: class Student(object): def __getattr__(self, attr
,或者位于该类型的父继承链上 要优先使用isinstance()判断类型,这样可将指定类型及其子类"一网打尽" #继承关系是:object -> Animal -> Dog -> Husky...:True dir()函数 dir()函数获得一个对象的所有属性和方法,它返回一个包含字符串的list 获得一个str对象的所有属性和方法 dir('ABC') #输出:['__add_..."对象.属性或方法"的方式会报错 getattr():获取对象某属性或方法,可使用hasattr()预先判断对象是否包含 也可直接使用该函数获取,如果没有,则返回指定默认值...,否则直接通过"对象.属性或方法"的方式会报错 setattr():给对象设置某属性或方法,并赋值 只有在不知道对象信息的时候,才会去获取对象信息,如果可以通过"对象.属性",就不要通过 getattr...print(obj.y) #输出:19 getattr(obj, 'z') #输出:报错,如果试图获取不存在的属性,会抛出AttributeError的错误,对象obj没有属性
hasattr(object, name):用来检测object(适用于类、文件、模块或对象,一切皆对象)中有没有一个name字符串对应的方法或属性。...__add__(n) >>> print(s) 7/9 代码中__repr__ = __str__的含义是在类被调用(实例化对象)时,向变量(即实例化的对象)提供__str__()里的内容。 ...,对象也只能使用那些属性,对象不能自己去创建新属性(因为没有了__dict__),也不能修改类的属性,因为受类控制。 ...print('通过键的方式删除对象属性') ... self....属性联系在一起,此时基本上已经脱离了list、str、tuple、dict父类的内容,大部分都是自身定义的内容。
内置的一些属性,主要包括__repr__,__str__,主要用来打印和构造时用的,__format__主要用来格式化用的,属性有两种设置方法,__enter__和__exit__是在进行上下文管理用的...class ClassDemo: #创建大量对象时节省内存方法,暂时不使用 #_slots__ = ['x', 'y','z','_formats'] def __init__(...set_xy') if not isinstance(value, tuple): raise TypeError('value Expected a tuple...#property set_y print(p.x) #@property x 5 print(p.y) #property get_y 6 p.xy=(6,7)...Can't delete attribute") del p.y #property del_y del p.xy #property del_xy,会抛出异常,因为y已经被删除
(range(7)) >>> v7[-1] # 6.0 >>> v7[1:4] # Vector([1.0, 2.0, 3.0]) >>> v7[-1:] # Vector...__setattr__(name, value) # 其他name可以赋值 值得说明的是,__getattr__的机制是:对my_obj.x表达式,Python会检查my_obj实例有没有名为x的属性...第4版:散列 通过实现__hash__方法,加上现有的__eq__方法,Vector实例就变成了可散列的对象。...其中__eq__方法做了下修改,用到了归约函数all(),比tuple(self) == tuple(other)的写法,能减少处理时间和内存。...小结 经过上下两篇文章的介绍,我们知道了Python风格的类是什么样子的,跟常规的面向对象设计不同的是,Python的类通过魔法方法实现了Python协议,使Python类在使用时能够享受到语法糖,不用通过
Django form 流程 1、创建类,继承form.Form 2、页面根据类的对象自动创建html标签 3、提交,request.POST 封装到类的对象里,obj=UserInfo(request.POST...obj.errors 首先关闭跨站请求 #'django.middleware.csrf.CsrfViewMiddleware', 有错误会阻止提交,并提示错误信息 成功提交,可以获取到提交的值...2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17...DOCTYPE html> ...,{'obj':obj}) + View Code Form生成select标签 静态select 动态select 当增加数据库数据时 不会更新,除非关闭程序,重新载入才会更新 解决方法:利用面向对象类的静态字段
__ = ('name', 'sex') # 用tuple定义允许绑定的属性名称 p = Person() p.name = 'Mary' # 绑定属性'name' p.sex = 'female'...# 绑定属性'sex' p.age = 19 # 绑定属性'age' 报错: Traceback (most recent call last): File "run.py", line 7, in... p.age = 19 # 绑定属性'age' AttributeError: 'Person' object has no attribute 'age' 由于'age'没有被放到...__slots__中,所以不能绑定age属性,试图绑定age将得到AttributeError的错误。...): __slots__ = ('skill', 'age') # 用tuple定义允许绑定的属性名称 s = Son() s.name = 'Kaven' # 绑定属性'name' print
针对一个对象,通过以下几个函数,可以获取到该对象的一些信息。...,比如下面的代码就可以判断是否是list或者tuple: >>> isinstance([1, 2, 3], (list, tuple)) True >>> isinstance((1, 2, 3),...(list, tuple)) True 3、dir() 获得一个对象的所有属性和方法 ,返回一个包含字符串的list ,一个str对象的所有属性和方法 >>> dir('ABC') ['__add__...--------------- 如果试图获取不存在的属性,会抛出AttributeError的错误: >>> getattr(obj, 'z') # 获取属性'z' Traceback (most...'z' 可以传入一个default参数,如果属性不存在,就返回默认值: >>> getattr(obj, 'z', 404) # 获取属性'z',如果不存在,返回默认值404 404 也可以获得对象的方法
列举至少五个 Python 2 中的 print 语句被 Python 3 中的 print()函数取代,在 Python 3 中必须用括号将需要输出的对象括起来; Python 2 有基于 ASCII...的 str()类型,其可通过单独的 unicode()函数转成 unicode 类型,但没有 byte 类型。...在 python2.x 中.Next()函数可以作为函数的属性使用,也可以单独作为函数使用; 在 python3.x 中只能使用函数,使用。...6.Python 里面如何实现 tuple 和 list 的转换? 直接使用 tuple 和 list 函数就行了,type()可以判断对象的类型。...7.请写出一段 Python 代码实现删除一个 list 里面的重复元素。
他判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上。...) True#str和unicode都是从basestring继承下来的 使用dir() >>> dir('ABC')#获得一个str对象的所有属性和方法 ['__add__', '__class__'...= ('name', 'age') # 用tuple定义允许绑定的属性名称 >>> s = Student() # 创建新的实例 >>> s.name = 'Michael' # 绑定属性'name'...stdin>", line 1, in AttributeError: 'Student' object has no attribute'score' 由于'score'没有被放到_..._slots__中,所以不能绑定score属性,试图绑定score将得到AttributeError的错误。
,动态添加属性,还有没有啥我不知道的知识了?"...有没有办法限制一下呢? 小明哈哈一笑,娓娓道来: 1.指定实例属性 如果我们想要限制实例的属性怎么办?比如,只允许添加指定属性和方法?...# 定义一个类 class Person(object): __slots__ = ("age", "name") # 用tuple定义允许绑定的属性名称 def show(self...,计数为0就删除 str7 = "明" str8 = "明" str9 = "明" print(id(str7)) print(id(str8)) print(id(str9)) 140602139296272...刚刚说到的例子中,我们以一个不是很常见的情况结尾:我们有一个“孤岛”或是一组未使用的、互相指向的对象,但是谁都没有外部引用。
领取专属 10元无门槛券
手把手带您无忧上云