首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过内置对象理解 Python(七)

prop = 42 ... >>> C.prop 42 你甚至可以设置和删除对象属性: >>> C.prop = 84 >>> C.prop 84 >>> del C.prop 将字典键值对和对象及其属性比较...这里使用了 getattr 函数,它能接受一个字符串为属性,并设置属性值。 setattr 和 delattr 也都有类似的功能:它们接受字符串属性名称,并相应地设置或删除属性值。...,独立于任何类或对象属性。...坦率地说,描述符是一个非常高级的话题,如果在这里试图涵盖它,没有任何用处,因为它只是和已告知内容有所关联。...:像列表一样有序和,但有一个关键区别: 它们是不可变,这意味着一旦创建了元组对象,就不能添加或删除其中成员。

54520

《Python 源码剖析》一些理解以及勘误笔记(2)

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.

1.1K00
您找到你想要的搜索结果了吗?
是的
没有找到

学习笔记-小甲鱼Python3学习第十三

用()把元素括起来,用,逗号隔开 创建和访问元组 更新和删除元组 元组相关操作符 元组创建: >>> 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) 团队合作开发程序,传递给一个你并不了解具体实现函数参数

49610

Python 元组和集合特点及常用操作

一、元组特点: 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') #作为一个整体,添加单个对象到集合里

88920

Python编程常见出错信息及原因分析(2)

: '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.3K70

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

74210

Python学习 Day 10 str iter getitem getattr call

与之对应是__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

86830

获取对象信息

,或者位于该类型父继承链上   要优先使用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没有属性

1.8K50

Python如何设计面向对象类(下)

(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类在使用时能够享受到语法糖,不用通过

52930

Python对象相关内置函数

针对一个对象,通过以下几个函数,可以获取到该对象一些信息。...,比如下面的代码就可以判断是否是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 也可以获得对象方法

84730
领券