摘要:
命名空间字典 我们学到了模块的命名空间实际上是以字典的形式实现的,并且可以由内置属性__dict__显示这一点。类和实例对象也是如此:属性点号运算其实内部就是字典的索引运算,而属性继承其实就是搜索连结的字典而已。实际上,实例和类对象就是Python中带有链接的字典而已。Python揭露这些字典,还有 阅读全文
posted @ 2017-08-08 16:32
耳木东木2
阅读(235)
评论(0)
推荐(0)
摘要:
__call__拦截调用 当实例调用时,使用__call__方法。不,这不是循环定义:如果定义了,Python就会为实例应用函数调用表达式运行__call__方法。这样可以让类实例的外观和用法类似于函数。 运行结果: 在这个例子中,__call__似乎没什么特别的意义。下面这个简单的方法也能提供类似 阅读全文
posted @ 2017-08-08 13:40
耳木东木2
阅读(233)
评论(0)
推荐(0)
摘要:
__radd__处理右侧加法 从严格意义上来讲,前边例子中出现的__add__方法并不支持+运算符右侧使用实例对象。要实现这类表达式,而支持可互换的运算符,可以一并编写__radd__方法。+右侧的对象是类实例,而左边对象不是类实例时,Python才会调用__radd__。所有情况下,则由左侧对象调 阅读全文
posted @ 2017-08-08 13:31
耳木东木2
阅读(1397)
评论(0)
推荐(0)
摘要:
__repr_和__str__会返回字符串表达形式 下一个例子是已经见过的init构造方法和add重载方法,本例也会定义返回实例的字符串表达形式的__repr__方法。字符串格式把self.data对象转换为字符串。如果定义了的话,当类的实例打印或转换成字符申时,__repr__(或其近亲__str 阅读全文
posted @ 2017-08-08 13:05
耳木东木2
阅读(219)
评论(0)
推荐(0)
摘要:
__getattr__和__setattr__捕捉属性的一个引用 __getattr__方法是拦截属性点号运算。更确切地说,当通过对未定义(不存在)属性名称和实例进行点号运算时,就会用属性名称为字符串调用这个方祛。如果Python可通过其继承树搜索流程找到这个属性,该方法就不会被调用.因为有这种情况 阅读全文
posted @ 2017-08-08 10:38
耳木东木2
阅读(306)
评论(0)
推荐(0)
摘要:
1、迭代器基于下面两个个方法: (1)__next__ 返回容器的下一个项目(2)__iter__ 返回迭代器本身 2、当序列遍历完时,将抛出StopIteration异常,所以通过捕获这个异常来停止循环 下面是自定义迭代器的示例代码: 运行结果: 用户定义的迭代器 如今,Python中所有的迭代坏 阅读全文
posted @ 2017-08-08 10:13
耳木东木2
阅读(162)
评论(0)
推荐(0)
摘要:
getitem一拦截索引运算 __getitem__方法拦截实例的索引运算。当实例x出现在x[i]这样的索引运算中时,Python会调用这个实例继承的__getitem__方法(如果有的话),把x作为第一个参数传递,并且方括号内的索引值传给第二个参数。例如,下面的类将返回索引值的平方。 运行结果: 阅读全文
posted @ 2017-08-08 08:32
耳木东木2
阅读(197)
评论(0)
推荐(0)
摘要:
类接口技术 扩展只是一种同超类接口的方式。下面所展示的sPecial'ze.Py文件定义了多个类,示范了一些常用技巧。Super 定义一个method函数以及一个delegate函数.Inheritor没有提供任何新的变量名,因此会获得Super中定义的一切内容。Replacer 用自己的版本授盖S 阅读全文
posted @ 2017-08-08 07:26
耳木东木2
阅读(225)
评论(0)
推荐(0)
摘要:
类可以截获Python运算符 现在,让我们来看类和模块的第三个主要差别: 运算符重载。简而言之,运算符重载就是让用类写成的对象,可截获并响应用在内置类型上的运算:加法、切片、打印和点号运算等。这只是自动分发机制:表达式和其他内置运算流程要经过类的实现来控制。这里也和模块没有什么相似之处:’模块可以实 阅读全文
posted @ 2017-08-08 06:08
耳木东木2
阅读(279)
评论(0)
推荐(0)