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

面向对象-魔术方法

一、魔术方法 概念 在python中,所有以__xxx__格式方法统称为“魔术方法方法 初始化 __new__ __init__ __del__ 属性控制 __getattr...当对未定义属性名称和实例进行点号运算时,就会用属性名作为字符串调用这个方法。如果继承树可以找到该属性,则不调用此方法 __setattr__ 会拦截所有属性赋值语句。...这个需要注意,当在__setattr__方法内对属性进行赋值时,不可使用self.attr = value,因为他会再次调用self....应该通过对属性字典做索引运算来赋值任何实例属性,也就是使用self....He is %d years old"%(self.name, self.age) # 使用点语法访问不存在属性时被自动调用 # 作用:调用某些不存在属性时不想报错,想返回一个默认值

23630

python 中__setattr__, __getattr__,__getattribute__, __call__使用方法

当对未定义属性名称和实例进行点号运算时,就会用属性名作为字符串调用这个方法。...如果继承树可以找到该属性,则不调用此方法 实例instance通过instance.name访问属性name,只有当属性name没有在实例__dict__或它构造类__dict__或基类__dict...__setattr__(self, name, value) 会拦截所有属性赋值语句。如果定义了这个方法,self.arrt = value 就会变成self....当在__setattr__方法内对属性进行赋值时,不可使用self.attr = value,因为他会再次调用self....如果类自定义了__setattr__方法,当通过实例获取属性尝试赋值时,就会调用__setattr__。常规实例属性赋值,被赋值属性和值会存入实例属性字典__dict__中。

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

python 基础内置函数表及简单介绍

请注意,类是可调用(调用一个类返回一个新实例); 如果类有一个 __call __()方法,则实例可以被调用。...@classmethod 将方法转换为类方法。 类方法将类作为第一个参数接收(隐式),就像实例方法接收实例一样。...搜索顺序与 getattr() 使用顺序相同,只不过 type 本身被跳过。 type __mro__ 属性列出 getattr() 和 super() 使用方法解析顺序。...如果两个参数形式指定了准确参数,就能进行正确引用。零参数形式只能在类定义中使用,因为编译器会填充必要细节以正确检索正在定义类,以及访问普通方法的当前实例。...模块和实例这样对象 __dict__ 属性可以更新;但是其它对象可能对它们 __dict__ 属性写操作有限制(例如,类使用 types.MappingProxyType 来阻止对字典直接更新)

1.3K20

Python 内建函数大全

请注意,类是可调用(调用一个类返回一个新实例); 如果类有一个 __call __()方法,则实例可以被调用。...@classmethod 将方法转换为类方法。 类方法将类作为第一个参数接收(隐式),就像实例方法接收实例一样。...搜索顺序与 getattr() 使用顺序相同,只不过 type 本身被跳过。 type __mro__ 属性列出 getattr() 和 super() 使用方法解析顺序。...如果两个参数形式指定了准确参数,就能进行正确引用。零参数形式只能在类定义中使用,因为编译器会填充必要细节以正确检索正在定义类,以及访问普通方法的当前实例。...模块和实例这样对象 __dict__ 属性可以更新;但是其它对象可能对它们 __dict__ 属性写操作有限制(例如,类使用 types.MappingProxyType 来阻止对字典直接更新)

1.9K30

python之内置函数

next()方法将返回一个tuple iter(o[, sentinel]) 生成一个对象迭代器,第二个参数表示分隔符 max(iterable[, args…][key]) 返回集合中最大值 min...) 1、注解,用来说明这个方式是个类方法2、类方法即可被类调用,也可以被实例调用3、类方法类似于Java中static方法4、类方法中不需要有self参数 compile(source, filename...4、参数flag和dont_inherit:这两个参数暂不介绍 dir([object]) 1、不带参数时,返回当前范围内变量、方法和定义类型列表;2、带参数时,返回参数属性方法列表。...3、如果参数包含方法__dir__(),该方法将被调用。当参数为实例时。...推荐使用open print 打印函数 raw_input([prompt]) 设置输入,输入都是作为字符串处理 getattr 使用方法: >>>class A(object):

27630

原来Python函数只是个对象

写Python越多,写函数越多,于是乎有人觉得Python是函数式语言,其实不然,Python只是函数式语言中借鉴了一些好想法而已。...作者并不建议使用这3个高阶函数,因为在Python3中有更好替代品,而且更易于阅读。...类 类是可调用,调用类时会调用类__new__方法创建一个实例,然后调用__init__方法初始化实例,最后返回实例给调用方。 Python没有new运算符,调用类相当于调用函数。...类实例 如果类定义了__call__方法,那么它实例可以作为函数调用。...生成器函数 yield关键字定义函数或方法生成器函数返回值是生成器对象。 函数内省 函数对象有很多属性: >>> def func(): ...

49530

Python学习笔记3.2-python内置函数大全

= 0]) 返回一个可枚举对象 该对象next()方法将返回一个tuple iter(o[, sentinel]) 生成一个对象迭代器,第二个参数表示分隔符 max(iterable[, args...set() set对象实例化 frozenset([iterable]) 产生一个不可变set str([object]) 转换为string类型 sorted(iterable[, cmp...映射 函数名称 函数功能 备注 callable(object) 检查对象object是否可调用 1、类是可以被调用2、实例是不可以被调用,除非类中声明了call方法 classmethod() 注解...,用来说明这个方式是个类方法方法即可被类调用,也可以被实例调用,类方法类似于Java中static方法,类方法中不需要有self参数 compile(source, filename, mode[...dir([object]) 1、不带参数时,返回当前范围内变量、方法和定义类型列表;2、带参数时,返回参数属性方法列表。3、如果参数包含方法dir(),该方法将被调用。当参数为实例时。

81090

python内置函数大全

next()方法将返回一个tuple iter(o[, sentinel]) 生成一个对象迭代器,第二个参数表示分隔符 max(iterable[, args...]...object) 检查对象object是否可调用1、类是可以被调用2、实例是不可以被调用,除非类中声明了__call__方法 classmethod() 1、注解,用来说明这个方式是个类方法2、类方法即可被类调用...,也可以被实例调用3、类方法类似于Java中static方法4、类方法中不需要有self参数 compile(source, filename, mode[, flags[, dont_inherit...4、参数flag和dont_inherit:这两个参数暂不介绍 dir([object]) 1、不带参数时,返回当前范围内变量、方法和定义类型列表;2、带参数时,返回参数属性方法列表。...3、如果参数包含方法__dir__(),该方法将被调用。当参数为实例时。

92710

python抽象基类

与jvm上语言不一样,python语言没有interface关键字,而且除了抽象基类,每个类都有相应接口:类实现或继承公开属性方法或数据类型) 在定义里,受保护属性和私有属性不在接口中:即便...“受保护属性也只是采用名称改写,私有属性也是可以轻松访问。...__x a = test(3) a.x Out[3]: 3 接口是实现特定方法集合,协议和继承没有关系,一个类可能实现多个接口,从而让实例扮演多个角色。 接下来再继续看看序列协议。...我们可以在test1已经实例化后,再设置__setitem__,在运行时修改类和模块,而不改动源码,这就是所谓“猴子补丁”。...“鸭子类型”:忽略对象真正类型,转而关注对象有没有实现所需方法,签名和语义。 继承抽象基类很简单,只要实现python里特殊方法__len__之类,这样python就会自动识别。

88210

【十一】Python基础之内置函数

返回一个可枚举对象,该对象next()方法将返回一个tuple iter(o[, sentinel]) 生成一个对象迭代器,第二个参数表示分隔符 max(iterable[, args...]...(object) 检查对象object是否可调用 1、类是可以被调用 2、实例是不可以被调用,除非类中声明了__call__方法 classmethod() 1、注解,用来说明这个方式是个类方法...2、类方法即可被类调用,也可以被实例调用 3、类方法类似于Java中static方法 4、类方法中不需要有self参数 compile(source, filename, mode...4、参数flag和dont_inherit:这两个参数暂不介绍 dir([object]) 1、不带参数时,返回当前范围内变量、方法和定义类型列表; 2、带参数时,返回参数属性方法列表。...3、如果参数包含方法__dir__(),该方法将被调用。当参数为实例时。

43430

Python内置函数(BIF)查询(附中文详解说明)

,内置函数个数以及具体用法有些许差异,罪保险方法就是得到自己使用版本内置函数会用方法,那么问题就来了,我们怎么在 Python IDLE 里得到全部内置常量和函数名字以及其具体用法呢? ...(o[, sentinel])生成一个对象迭代器,第二个参数表示分隔符max(iterable[, args...]...setstr([object]) 转换为string类型sorted(iterable[, cmp[, key[, reverse]]]) 队集合排序tuple([iterable]) 生成一个tuple...2、实例是不可以被调用,除非类中声明了__call__方法classmethod()1、注解,用来说明这个方式是个类方法 2、类方法即可被类调用,也可以被实例调用 3、类方法类似于Java中static...3、如果参数包含方法__dir__(),该方法将被调用。当参数为实例时。

1.2K30

Python内置函数详解【翻译自pyth

若,超出异常,将抛出ValuaError异常 @classmethod 讲一个方法转换为类方法方法接受类作为隐式第一参数,就像实例方法接受实例作为隐式第一个参数。...默认dir()机制对于不同类型对象具有不同行为,因为它尝试生成最相关,而不是完整信息: 如果对象是模块对象,列表包含模块属性名。...enumerate()返回迭代器__next__()方法返回一个元组,该元组包含一个计数(start开始,默认为0)和迭代iterable得到值。...这对于访问类中被覆盖继承方法很有用。除了跳过type本身之外,搜索顺序与getattr()所使用顺序相同。 type__mro__属性列出getattr()和super()使用方法解析顺序。...模块和实例这样对象__dict__属性可以更新;但是其它对象可能对它们__dict__属性写操作具有限制(例如,类使用types.MappingProxyType来阻止对字典直接更新)。

1.5K20

Python语言精华:Itertools库

本质上讲,该模块包含许多快速且内存效率高方法,这些方法可以帮助我们用纯Python简洁而高效地构建应用程序。 无限迭代器 如果我们想构造一个返回无限均匀间隔值迭代器呢?...或者,如果我们必须迭代器生成一个元素循环呢?或者,也许我们想要重复迭代器元素? itertools库提供了一组函数,我们可以使用这些函数来执行所需所有功能。...Count 作为实例,我们可以生成一个等距值无限序列: start = 10 stop = 1 my_counter = it.count(start, stop) for i in my_counter...: # this loop will run for ever print(i) 结果: 10 11 12 13 14 15 Cycle 我们可以使用cycle方法输入中生成无限循环元素...为了更好地理解它,请看下面的代码片段: iterable = 'FM' tee = it.tee(iterable, 5) for i in tee: print(list(i)) 这个方法返回整个可迭代

89220

【ES6基础】生成器(Generator)

);//2 console.log(iterable.next().value);//3 console.log(iterable.next().done);//true 从上述代码我们可以看出: 我们可以在实例生成器...generator对象里直接调用next()方法,同时我们也可以调用生成器原型链Symbol.iterator属性方法调用next(),效果是一致。...由此可见done属性用来标识生成器序列是否消费完了。当done属性为true时,我们就应该停止调用生成实例next方法。...04 生成器函数类型检测 如何检测一个函数是生成器函数和生成实例原型呢,我们可以使用constructor.prototype属性检测,实例代码如下: function *genFn() {} const...return()方法我们提前终止了生成器,返回return里值,再次调用next()方法时,done属性值为true,由此可见return提前终止了生成器,其它值也不再返回。

72630

【ES6基础】生成器(Generator)

);//2 console.log(iterable.next().value);//3 console.log(iterable.next().done);//true 从上述代码我们可以看出:我们可以在实例生成器...generator对象里直接调用next()方法,同时我们也可以调用生成器原型链Symbol.iterator属性方法调用next(),效果是一致。...由此可见done属性用来标识生成器序列是否消费完了。当done属性为true时,我们就应该停止调用生成实例next方法。...生成器函数类型检测 如何检测一个函数是生成器函数和生成实例原型呢,我们可以使用constructor.prototype属性检测,实例代码如下: function *genFn() {} const...return()方法我们提前终止了生成器,返回return里值,再次调用next()方法时,done属性值为true,由此可见return提前终止了生成器,其他值也不再返回。

1.4K50

Python基础-5 常用数据结构

1.1 列表创建 • 使用方括号创建空列表:[] • 使用方括号,里面的项用,隔开:[a,b,c] • 使用列表推导式:[x for x in iterable] • 使用构造器: list()或list...b, c) • 使用内置 tuple(): tuple() 或 tuple(iterable) 请注意决定生成元组其实是逗号而不是圆括号。...这个新子类用于创建类元组对象,可以通过字段名来获取属性值,同样也可以通过索引和迭代获取值。 子类实例同样有文档字符串(类名和字段名)。...为了防止字段名冲突,方法属性以下划线开始。 三个方法: classmethod somenamedtuple._make(iterable) 类方法存在序列或迭代实例创建一个新实例。..._replace(x=33) 两个属性: somenamedtuple._fields 字符串元组列出了字段名。用于提醒和现有元组创建一个新命名元组类型。 p.

1.1K30

一周新姿势 第2期

for–of循环并不能直接使用在普通对象上,但如果我们按对象所拥有的属性进行循环,可使用内置Object.keys()方法: for (var key of Object.keys(someObject...in判断是对象所有属性,包括对象实例及其原型属性;  而hasOwnProperty则是判断对象实例是否具有某个属性。...,name属性要么是从实例中获取,要么是来源于原型,所以使用in 来访问 name属性始终返回true;而hasOwnProperty()只在属性存在与对象实例中时才返回true,当删除了实例name...生产环境中,我们可以使用 Object.getPrototypeOf 方法来获取实例对象原型,然后再来为原型添加方法/属性。 ...3、__proto__与prototype联系在于:当一个对象要查找自己没有的属性或者方法时,它是通过__proto__属性去查找,而不是通过prototype属性,对象实例本身是没有prototype

49430

python学习笔记-基础

列表生成式 python内置了简单而强大生成list方式,通过使用列表生成式可以写出非常简洁代码。...实例属性和类属性 python是动态语言,根据类创建实例可以任意绑定属性。...类属性属于类所有,所有实例共享一个类属性。不要对实例属性和类属性使用相同名字,否则将发生难以发现错误 八、面向对象高级编程 1....使用slots 在程序运行时可以动态给class绑定属性,但如果想限制实例属性,例如只允许给Student类添加name或age属性,可以在提供定义class时,设置一个特殊__slots__变量:...__slots__定义属性仅对当前实例起作用,对继承子类不起作用。 2. 使用@property 在java中,如果定义了一个属性,一般会实现这个属性getter和setter方法

92990

猿创征文 |ES6学习笔记5-map

2)可以获得Map大小。  3)可以直接迭代Map。  4)在涉及频繁添加和删除键/值对场景中,Map性能更好。size属性返回映射中键/值对数目。 ...m​一个键,然后又使用​get​方法读取这个键,接着使用​delete​方法删除了这个键。...但实际上这是两个不同数组实例,内存地址是不一样,因此​get​方法无法读取该键,返回​undefined​。...Map结构实例属性和操作方法如下: (1)​size属性​     ​size​属性返回​Map​结构成员总数。...(6)​clear()​     ​clear​方法清除所有成员,没有返回值。 使用方法如下: Map原生提供​三个遍历器​生成函数和一个​遍历方法​。 ​keys()​:返回键名遍历器。 ​

85740
领券